模板专业化功能可以放在我的.cpp文件中吗?

乔纳森·米

可以说我有这个:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在模板专业化中获取名称/对专业化值的引用吗?

我可以从类型列表中声明模板专业化吗?

我可以使用using关键字进行部分模板专业化吗?

我可以使用std :: enable_if摆脱模板专业化吗?

功能模板专业化真的被允许吗?

模板专业化中的模板

这是部分模板专业化吗?

在专业化之前使用模板吗?

类和结构可以在模板专业化中互换使用吗?

您可以实例化模板的非专业版本并在专业化范围内从模板继承吗?

是否可以在函数模板的显式专业化中扣除多个模板参数?

模板专业化中的类型将继续计算吗?

局部专业化可以引用专业化参数列表中的sizeof(T)吗?

我的模板专业化调试版本与发行版本不同,这是gcc错误吗?

子模板中的C ++模板专业化

模板类中的类模板专业化

C ++中多个模板之一的模板专业化

从主模板或用户提供的专业化中检测类型是专业化

模板专业化中的隐式转换

C++ 98 中的部分模板专业化?

避免在用户定义的模板专业化中重复

C ++中的模板专业化和函数重载

无法在部分专业化中推导的模板参数

防止在C ++中编译未使用的模板专业化

在模板专业化中模拟开关分区

可以将部分模板专业化组合起来以产生隐式生成的共享代码路径吗?

有什么办法可以做部分专业化吗?

非专业模板中模板专业化的成员访问权限

C ++,我可以使用enable_if代替复制粘贴来启用多个特征类专业化吗?