Возможный дубликат:
Есть ли ошибка с внешним шаблоном в 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, поэтому я могу быть уверен, что тайминги достаточно велики, чтобы увидеть разницу)
Вопрос: Почему он не создает экземпляр std::vector только в отдельном файле *.cpp?
ИЗМЕНИТЬ Если в том же файле *.cpp у меня есть
extern template class std::list<int>;
void somefunc()
{
std::list<int> v1;
}
Я не получаю ошибку лайкера, даже если я явно не создаю экземпляр std::list в другом файле cpp. Это могло бы объяснить тот факт, что фактически это создается, даже если я указываю extern. Интересно, почему это. Я хочу создать экземпляр std::list в одной точке.