模板专业化可以放入我的.cpp吗?

时间:2018-10-25 17:48:43

标签: c++ header implementation template-specialization function-templates

让我说我有这个:

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的地方吗?


我问的原因是我在本地看到它可以双向工作。我认为区别在于:可以在实现中定义我仅在内部使用的用于定义类的专用模板方法。我在外部使用的专用模板方法似乎需要在标题中定义。我至今仍无法找到任何结论性的东西,所以我想问一下。

1 个答案:

答案 0 :(得分:1)

您要做的一件事就是声明专业化.cpp文件。有充分的理由,在 Explicit specialization of member function template in source file

但是,如果您将声明放在头文件中(据我了解,您打算这样做),只要从那里至少调用一次,专业化就可以进入.cpp文件-这样您就可以在翻译部门之外致电专业化部门。

至少有一个要求的原因是,编译器仅在实例被调用且定义可用时才实例化模板,但是实例化模板后,便可以在任何翻译单元中使用它。