可以说我有这个:
struct foo {
template <typename T>
void bar(const T param) { cout << param << endl; }
};
现在我要添加专业化:
template <>
void bar<char>(const char param) { cout << static_cast<int>(param) << endl; }
我可以仅将声明添加到在其中声明的标头foo
中并bar<char>
在其中实现实现文件中的defincefoo
吗?
我问的原因是我在本地看到它可以双向工作。我认为区别在于:可以在实现中定义我仅在内部使用的用于定义类的专用模板方法。我在外部使用的专用模板方法似乎需要在标头中定义。虽然我还没有找到任何结论性的东西,所以我想问一下。
您不要做的一件事就是在.cpp文件中声明专门化。源文件中成员函数模板的显式专门化中讨论了这样做的充分理由。
但是,如果将声明放在头文件中(据我了解,您打算这样做),只要从那里至少调用一次专门化即可进入.cpp文件,并且您可以在外部调用该专门化的翻译单位。
至少有一个要求的原因是,编译器仅在实例被调用且定义可用时才实例化模板,但是一旦实例化了模板,便可以在任何翻译单元中使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句