1
template<typename T> class A // template parameterization
{
   private:
      T t;
   A(const T& v) : t(v) {}
};

class B
{
    template<typename T>
    B(const T& v)
    {
        std::cout << v << std::endl;
    }
};

// usage of A and B
A<int> a;
B      b(10);

質問> クラス変数を定義するために、どのような状況でテンプレート パラメータを提供する必要がありますか。

例えば、

クラスにテンプレート メンバー変数または ??? が含まれている場合

ありがとうございました

4

1 に答える 1

3

クラスがクラス テンプレートの場合、インスタンスを作成するには、テンプレート パラメーターを指定する必要があります。あなたの例でclass Aは、クラステンプレートであり、そうでclass Bはありません。

クラス テンプレート:

template <typename T> class A {};

クラス テンプレートではありません:

class B { 
  // code may include function template, etc.
  // but the class itself is not a class template
};

あなたの例でclass Bは、テンプレートコンストラクターがあり、コンパイラーは引数を使用して、どの特殊化を行うかを決定できます。したがって、この場合、次と同等のコンストラクターを生成します

B(const int&);

リテラル10int. コンストラクターは関数のようなものではないため、コンパイラーが何でTあるかを理解できる場合にのみ機能します。詳細については、この関連する質問を参照してください。

于 2012-05-31T16:12:36.933 に答える