模板特化是否属于头文件或源文件?

时间:2012-08-02 08:46:00

标签: c++ templates header-files

在编译期间,我得到一个“多重定义”错误,它指的是头文件中的模板特化。我是否需要将专业化放入源文件中?

2 个答案:

答案 0 :(得分:19)

如果它是您专门的功能,您可以将它们放在.cpp文件中,或者在标题中将它们内联。

就像詹姆斯指出的那样,如果你没有内联函数,你仍然必须声明标题中的特化。否则编译器不知道它必须在别处寻找它们。

然后,您可以将实现(定义)放在.cpp文件中。就像其他功能一样。

答案 1 :(得分:9)

不,你不需要在单独编译的文件中添加特化,,你需要注意专门的函数模板只是一个普通的函数,因为它是完全专用的。

因此,除非声明为 inline ,否则无法在多个翻译单元中定义。