c++ - 在不使用专门化语法的情况下,为不同类型实现不同类型的模板类方法是否有效?

标签 c++

我正在审查同事的代码并发现:

头文件:

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/

相关文章:

c++ - Effective C++ Item 43 了解如何访问模板化基类中的名称

C++ OpenGL (freeglut)

c++ - 混合语言 F77/C++ : Avoid destruction of C++ instance

c++ - 增加缓冲是否会提高 C++ 中 ifstream.getline() 的最高速度?

c++ - CppCMS 中的表单构建错误

c++ - 使用程序在 C++ 中自动使用命令提示符

c++ - 成员函数指针和虚类

C++ 全局重载运算符=

C++ 对象不保存变量值

c++ - gdb,反转范围,错误的断点号