让我说我有这个:
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>
中定义foo
的地方吗?
我问的原因是我在本地看到它可以双向工作。我认为区别在于:可以在实现中定义我仅在内部使用的用于定义类的专用模板方法。我在外部使用的专用模板方法似乎需要在标题中定义。我至今仍无法找到任何结论性的东西,所以我想问一下。
答案 0 :(得分:1)
您要做的一件事就是声明专业化.cpp文件。有充分的理由,在 Explicit specialization of member function template in source file
但是,如果您将声明放在头文件中(据我了解,您打算这样做),只要从那里至少调用一次,专业化就可以进入.cpp文件-这样您就可以在翻译部门之外致电专业化部门。
至少有一个要求的原因是,编译器仅在实例被调用且定义可用时才实例化模板,但是实例化模板后,便可以在任何翻译单元中使用它。