3

私は

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++) { ...
4

3 に答える 3

5

テンプレート引数にはテンプレートのスコープがありますが、派生クラスで使用できるテンプレートでネストされた定数を定義できます。

template <int N> class Base {
public: // or protected:
   static const int theN = N;
};
于 2012-08-08T20:58:35.777 に答える
0

これは私が上記の私のコメントから意味したことです:

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をテンプレート化するのですか?クラス全体を専門にする必要がありますか?別の方法は、「特殊化」として設定した基準に基づいてテンプレートから呼び出される非メンバー関数を「仮想化」することです。

編集:テンプレート化されたクラスのメソッドの部分的な特殊化

于 2012-08-08T21:34:16.137 に答える