什么时候我们需要提供模板参数来定义一个类?

时间:2012-05-31 16:07:06

标签: c++

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);

问题&GT;在什么情况下,我们必须提供模板参数以定义类变量。

例如,

如果类包含模板成员变量或???

谢谢

1 个答案:

答案 0 :(得分: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时才能使用它。有关详细信息,请参阅this related question