【发布时间】:2017-06-29 04:48:36
【问题描述】:
导出模板是 2011 年之前的 C++ 中的一项功能,其中模板的实现将推迟到单独的源文件。
According to this article,可以通过手动指定实现文件中使用的每种类型来编写“手动”导出模板。由于这只会创建特定的符号 - 我相信与重载函数类似的方式 - 这将如何实现是有意义的。
但据我了解,导出的模板(通过 export 关键字)是任意的。它可以允许传递任何类型的数据。
举个简单的例子:
template<typename T>
T add(T value1, T value2) {
return value1 + value2;
}
如果 T 是 int、float 或特别是 std::string(以及任何其他重载 + 运算符的类型),则此示例的程序集输出会大不相同。
既然完全是任意的,编译器将如何实现这个关键字?
我的猜测是在链接时生成代码,这很可能需要自定义目标文件格式,其中包含代码的一些表示。但这也使链接器成为编译器,从而打破了预处理器-编译器-链接器的分离。
【问题讨论】:
标签: c++ templates compiler-construction c++98