使用带有STL类的extern模板类

时间:2013-07-31 16:06:42

标签: c++ visual-studio-2010 templates

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

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

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

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

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

并且在移除ctor时,仍然根据dumpbin定义dtor。这是什么原因?是因为出于某种原因,dtor被认为是内联的而ctor不是?

1 个答案:

答案 0 :(得分:-2)

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

在标题和源文件之间分割模板时出现问题 - 您可以搜索它。