我在* .cpp文件中使用VS12中的类似内容
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>;
我知道vector在第一个* .cpp文件中实例化的方式也是因为我得到了extern声明的相同编译时间而没有它(我实际上声明了extern更多类型所以我可以确定时间足够大以查看差异)
问题:为什么它不在单独的* .cpp文件中实例化std :: vector ?
修改的 如果在同一* .cpp文件中我有
extern template class std::list<int>;
void somefunc()
{
std::list<int> v1;
}
即使我没有在不同的cpp文件中显式实例化std :: list,我也没有得到liker错误。这可以解释即使我指定了extern,实际也会被实例化的事实。不知道为什么会这样。我想在一个点上实例化std :: list。