可能重复:
Visual C++ 中的外部模板是否存在错误?
我在 VS12 的 *.cpp 文件中使用类似的东西
extern template class std::vector<int>;
... at some point here I need to instantiate vector on int
std::vector<int> v1; // would not expect this to be instantiated here as I already have a *.cpp where I instantiate this *only once* for all project uses
在单独的 *.cpp 中,我想实例化所有常用的模板实例
#include "stdafx.h"
template class std::vector<int>;
template class std::list<int>;
template class std::list<long>;
template class std::list<short>;
template class std::list<long long>;
template class std::list<unsigned int>;
我知道向量在第一个 *.cpp 文件中实例化的方式也是因为我使用 extern 声明获得与没有它相同的编译时间(我实际上声明了更多类型的 extern,所以我可以确定时间足够大,可以看到差异)
问题:为什么它不仅在单独的 *.cpp 文件中实例化 std::vector ?
编辑 如果在同一个 *.cpp 文件中我有
extern template class std::list<int>;
void somefunc()
{
std::list<int> v1;
}
即使我没有在不同的 cpp 文件中显式实例化 std::list ,我也不会收到类似错误。这可以解释这样一个事实,即即使我指定了 extern ,它实际上也会被实例化。想知道为什么会这样。我想在一个点实例化 std::list 。