考慮C++以下情況:使用基類的模板參數在派生類中
template<int n>
class Base { ... };
class Derived3 : public Base<3> {
// a complicated body, making use of n=3
};
class Derived7 : public Base<7> {
// a completely different body, making use of n=7
};
裏面的Derived3
成員函數,我想明確地使用n=3
了,裏面Derived7
,n=7
,沒有硬編碼的數字,即仍然指的是像模板參數n
。下列選項來我的腦海:
而且模板化上
n
派生類,然後使用typedef
。這樣,派生類知道n
:template<int n> class DerivedTemplate3 : public Base<n> { ... }; typedef DerivedTemplate3<3> Derived3; template<int n> class DerivedTemplate7 : public Base<n> { ... }; typedef DerivedTemplate7<7> Derived7;
的問題,這是
DerivedTemplateX
做什麼也不要,n=X
意義,所以這種感覺就像濫用模板範例。使用靜態const成員存儲在
n
Base
,並且指的是在派生類:template<int n> class Base { protected: static const int nn = n; ... }; class Derived3 : public Base<3> { // refer to nn=3 }; class Derived7 : public Base<7> { // refer to nn=7 };
這裏的問題是,我貌似不能使用相同的標識符(
nn
與n
)。另外,我不確定這是否允許我使用nn
作爲派生類成員的模板參數。
那麼:如何以非冗餘,有效的方式實現呢?也許在某處使用某種static const int
作爲成員?
就是這樣。也可以使用'enum'來避免靜態成員變量。 –
好的,謝謝。所以我的第二個建議實際上是標準做法,除了稍微不同的命名約定。 – Roman
@KarelPetranek爲什麼要避免使用'static const int'成員變量? – Walter