使用类模板而不是使用成员模板时是否有一个好的规则? 据我了解,如果您的类包含成员变量模板,您将被迫使用类模板,否则您可以自由选择:
template<typename T>
class Foo
{
public:
void someMethod(T x);
};
表现得像这样:
class Foo
{
public:
template<typename T>
void someMethod(T x);
};
我的说法错了吗?或者在使用什么时有任何经验法则吗?
答案 0 :(得分:3)
两者完全不一样。第一个:
Foo<int> f;
f.someMethod('a');
被叫函数是someMethod(int)
。
第二个:
Foo f;
f.someMethod('a');
被叫函数是someMethod(char)
。
答案 1 :(得分:1)
出于多种原因,您可以选择将您的类设为模板,而不是使用成员函数模板。假设您有一个模板参数T
。
T
类型的成员变量,你的类需要是一个模板。T
而不接受T
,并且您不想在每次调用中手动指定类型,则您的类必须是模板。T
的虚拟功能,则您的课程必须是模板。T
的每个实例中使用不同的类布局(即成员变量),则您的类必须是模板。最好的经验法则是使用最简单的事情。一般而言,成员函数模板往往更为罕见 - 并且几乎不存在您正在谈论的用例。也许这不是巧合。