传统 C++ 中,模板只有在使用时才会被编译器实例化。换句话说,只要在每个编译单元(文件)中
并且,我们没有办法通知编译器不要触发模板的实例化。
template class std::vector<bool>; // 强行实例化
extern template class std::vector<double>; // 不在该当前编译文件中实例化模板
下面是一个示例演示如何使用外部模板:
// 文件: main.cpp #include "mytemplate.h" int main() { foo(42); // 这里不会发生模板的实例化 return 0; }在上面的示例中,我们有三个文件:
mytemplate.h:包含了一个模板函数foo的声明。main.cpp:包含了main函数,在其中调用了foo函数。implementation.cpp:包含了对foo函数的实例化,并在其他地方调用了foo函数。
这样做的好处是,如果我们有其他源文件也使用了foo函数,它们可以选择性地进行模板实例化,从而避免重复的实例化,节省编译时间和减小二进制文件的大小。
No comments yet.