我正在审查同事的代码并发现:
头文件:
template<class T>
class MyClass
{
void Execute();
}
Cpp 文件:
void MyClass<int>::Execute()
{
// something
}
void MyClass<string>::Execute()
{
// something else
}
代码特化了函数,但没有使用模板特化语法。我想它工作正常,但它有效吗?
最佳答案
是的,专门化模板类的方法是完全有效的。
但你的语法是错误的,应该是:(抱歉,最初没有看到你错过了 template<>
。只是假设它在那里,并认为你在询问成员函数特化.)
template<>
void MyClass<int>::Execute()
{
// something
}
template<>
void MyClass<string>::Execute()
{
// something else
}
您只需要在标题中声明这些。如果你也在标题中实现它们,你需要标记它们 inline
防止多重定义。
调用方法时,调用最适合调用的版本。否则,默认。
在您的情况下,如果您使用类 X
专门化模板并尝试调用Execute
,您将收到链接器错误,因为您没有提供默认实现,也没有提供 Execute
的特化。对于 X
.
关于c++ - 在不使用专门化语法的情况下,为不同类型实现不同类型的模板类方法是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094387/