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;在什么情况下,我们必须提供模板参数以定义类变量。
例如,
如果类包含模板成员变量或???
谢谢
答案 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&);
因为文字10
是int
。构造函数与函数不同,因此只有在编译器能够找出T
时才能使用它。有关详细信息,请参阅this related question。