外部模板在标准C++(www.cppentry.com)中,只要在编译单元内遇到被完整定义的模板,编译器都必须将其实例化(instantiate)。这会大大增加编译时间,特别是模板在许多编译单元内使用相同的参数实例化。看起来没有办法告诉C++(www.cppentry.com)不要引发模板的实例化。
C++(www.cppentry.com)11将会引入外部模板这一概念。C++(www.cppentry.com)已经有了强制编译器在特定位置开始实例化的语法:
template class std::vector<MyClass>;
而C++(www.cppentry.com)所缺乏的是阻止编译器在某个编译单元内实例化模板的能力。C++(www.cppentry.com)11将简单地扩充前文语法如下:
extern template class std::vector<MyClass>;
这样就告诉编译器不要
在该编译单元内将该模板实例化。