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);Question>在什么情况下,我们必须提供模板参数才能定义类变量。
例如,
如果类包含模板成员变量或?
谢谢
发布于 2012-06-01 00:12:37
如果类是类模板,则必须提供模板参数来创建实例。在您的示例中,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。
https://stackoverflow.com/questions/10837259
复制相似问题