2

我试图将 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 被移除时,dtor 仍然根据dumpbin. 这是什么原因?是因为出于某种原因,dtor 被认为是内联的,而 ctor 不是吗?

4

1 回答 1

-2

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

在标头和源文件之间拆分模板存在问题 - 您可以搜索它。

于 2013-07-31T16:13:29.567 回答