c++ - 将外部模板类与 STL 类一起使用

标签 c++ visual-studio-2010 templates

我试图将 std::map、std::multimap 和 std::vector 的某些模板实例化限制为仅一个对象文件,以尝试改进编译和链接时间。据我了解,我不能简单地使用的原因

#include <vector>
extern template class std::vector<int>;
std::vector<int> myobj;

是 VS10 的 header 包含所有成员的定义,因此它们被编译器视为内联,并且无论如何都会实例化。如果我从标题中删除所有函数体,我的假设是否正确?如果是这样,是否有人恰好已经拥有这样的 header 并能够共享它?

我也试过像这样列出一些成员

extern template std::vector<int>::vector(); // works
extern template std::vector<int>::~vector(); // no effect

虽然删除了 ctor,但仍根据 dumpbin 定义了 dtor。这是什么原因?是否因为某种原因 dtor 被认为是内联的而 ctor 不是?

最佳答案

STL 数据结构是在头文件中实现的标准,因此这不是 VS10 特定的。为什么要限制为只有一个目标文件?

在头文件和源文件之间拆分模板时出现问题 - 您可以搜索该问题。

关于c++ - 将外部模板类与 STL 类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975434/

相关文章:

c++ - 跟踪动态内存

c++ - 在 vector 中查找不相等的相邻索引

c++ - HTTP Server 3 示例中跨线程的 boost::asio 套接字共享

visual-studio-2010 - 在Visual Studio中滚动导致文本变得不可读

c++ - 使用特征时避免部分模板特化中的函数定义重复

c++ - 调用成员函数时出错

c++ - 用于设置 Visual Studio/C++ 开发环境的资源

visual-studio-2010 - 设置和部署项目中系统驱动器的默认位置

c# - 如何在 asp .net mvc 2 中对不直接属于我的模型的对象使用 DisplayFor()?

html - html 模板中的内容被模板的文件位置而不是所需的文本替换