C ++ 11 - 使用extern模板减少编译时间

时间:2012-11-28 20:35:05

标签: c++ templates c++11 compiler-optimization

  

可能重复:
  Is there a bug with extern template in Visual C++?

我在* .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。

0 个答案:

没有答案