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);
问题> 在什么情况下,我们必须提供模板参数才能定义类变量。
例如,
如果类包含模板成员变量或???
谢谢
最佳答案
如果类是类模板,则必须提供模板参数才能创建实例。在您的示例中,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了解更多详情。
关于c++ - 什么时候我们需要提供模板参数来定义一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837259/