c++ - 专门的模板是否需要专门的声明?
问题描述
我想要一个只为某些类型定义的模板化函数,所以我写:
/* --- header file with just a declaration --- */
template<class T>
void myFunction(T arg);
/* --- cpp file with specialized definition --- */
template<>
void myFunction<int>(int arg){
// mybody
}
但是我有点困惑,例如阅读this answer。头文件中的声明是否足以让链接器始终链接到相同的特化(静态链接)?还是我需要添加另一个:
template<>
void myFunction<int>(int arg);
在标题中?
解决方案
您必须从链接的帖子中查看的部分是:
如果模板、成员模板或类模板的成员被显式特化,则应在第一次使用该特化之前声明该特化,这将导致隐式实例化发生,在每个翻译单元中出现这种使用[...]
您可以通过显式实例化声明创建此类声明,该声明告诉编译器显式特化位于其他位置。
在头文件中,您可以将显式实例化声明为
extern template void myFunction(int)
推荐阅读
- mysql - 如何列出订单商品以及每件商品的订单总额
- git - 为什么 git status 显示 /vendor 目录下的文件?
- arrays - 如何在for循环中使用指针?
- sql-server - 查询 xml 数据 - 来自 Microsoft 的示例数据不起作用
- python - ValueError: Graph disconnected: cannot get value for tensor Tensor in keras, 我该如何解决?
- python - 在多列上共享标签编码器
- flutter - Flutter 中的 youtube 评论表单
- python - 如何将 pyplot 中的“标记大小”与数据中的实验直径相关联?
- node.js - 在 VSCode 中使用 Webpack 使用 Typescript 调试 Node.js 是不可能的,请提供一些建议
- scala - Scalafix:解析对象应用方法