4

クラス外のテンプレート パラメーターにアクセスしたいと思います。私は通常、次のようにこれを行います。

template <class T>
class A
{
  typedef typename T T;
}

A<int>::T;

タイプ以外のテンプレート パラメータに対しても同じことができるようにしたいと考えています。これは機能しません:

template <int T>
class A
{
  typedef typename T T;
}

A<3>::T;

なぜこれが必要なのかを明確にします。次のように2番目のクラスを定義したい:

template <class C>
class B
{
  static int func() {return C::T;}
}

B<A<3> >::func();

これを行う正しい方法は何ですか?どうもありがとうございました。

4

3 に答える 3

5

これTは、型名ではなく、できないtypedefためです。これはint値であり、クラスの静的メンバーとしてアクセスする場合は、 static member が必要ですint。あなたが本当に欲しいのはこれのようです:

template <int T>
class A
{
  public:
    static const int x = T;
};

doSomething(A<5>::x);
于 2013-02-10T15:34:01.113 に答える
2

これは値であり、タイプではないため、おそらく次のようになります。

template <int T>
class A
{
  static const int param = T;
};

そして、としてアクセスできますA<42>::param。A自体が他の場所でテンプレートパラメータとして使用されていない限り、それはあまり役に立ちません。

于 2013-02-10T15:37:27.877 に答える
1

2 番目のケースでTは、型ではなく、int値です。const intしたがって、または static const int値として定義する必要があります。

template <int T>
class A {
    static const int T = T;
};

型に使用するのが通例であることに注意してくださいT(特に、型にあいまいさがないため、テンプレートがモナドである場合)、定数の他の名前、通常はより意味のある名前、たとえばSIZE、またはできればSize(すべて大文字の記号が最適です)マクロに使用されます)。

template <int Param>
class A {
    static const int param = Param;
};

テンプレート定義のコンテキストでの値の使用については、他の SO の質問 (このようなもの) を参照してください。static const

于 2013-02-10T15:38:52.513 に答える