私は
template <int N> class Base
と
class Derived : public Base<1>
int N... aの定義内から fromにアクセスする方法はありますかDerived::myMethod()(コンパイラ エラー「宣言されていない識別子 'N' の使用」を取得する代わりに)?
より正確には、私はしたいです
void Derived::myMethod() {
for (int n=0; n<N; n++) { ...
テンプレート引数にはテンプレートのスコープがありますが、派生クラスで使用できるテンプレートでネストされた定数を定義できます。
template <int N> class Base {
public: // or protected:
static const int theN = N;
};
これは私が上記の私のコメントから意味したことです:
class Base{
public:
Base(int value = 1) : value_(value){} //don't need to use default param but can
private:
int value_
}
class Derived : public Base
{}
なぜNをテンプレート化するのですか?クラス全体を専門にする必要がありますか?別の方法は、「特殊化」として設定した基準に基づいてテンプレートから呼び出される非メンバー関数を「仮想化」することです。