1

可能重复:
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 。

4

0 回答 0