在 C++ 中控制模板的实例化 [复制]

Controlling Instantiations of template in C++ [duplicate]

提问人:Yiqun Cui 提问时间:11/13/2023 最后编辑:user229044Yiqun Cui 更新时间:11/13/2023 访问量:33

问:

此语句摘自 C++ Primer Ver5 P675 第 16.1.5 节

使用模板时生成实例化的事实 (§ 16.1.1,第 656 页)意味着相同的实例化可能出现在多个对象文件中。当两个或多个单独编译的源代码时 文件使用相同的模板和相同的模板参数,有 每个文件中该模板的实例化。在大 系统,在多个中实例化同一模板的开销 文件可能会变得很重要。在新标准下,我们可以避免 通过显式实例化开销。

// for example, instantion declaration and definition

extern template class Blob<string>; // declaration
template int compare(const int&, const int&); // definition

所以我的问题是,像矢量这样的 stl 模板是否有必要?

例如,如果我实例化/使用 .cpp 文件中的文件,我是否应该使用 b.cpp 文件中类似的东西来避免开销?vector<int>extern template vector<int>

C++ 模板

评论

1赞 Jerry Coffin 11/13/2023
这是一个优化,所以请遵循标准规则。规则#1:不要这样做。规则#2:现在不要这样做。更严重的是,除非你正在构建一个(至少)几千个文件的系统,否则可能不值得考虑。请记住,您在这里优化的只是构建时间,而不是执行速度,因此在构建时间成为问题之前,请不要担心。充其量,显式实例化将为每个文件节省几毫秒的时间。

答: 暂无答案