1、What
C++11标准引入的一种机制,允许在头文件中声明模板,但仅在一个单独的源文件中显式实例化这些模板。这一机制使得编译器只需要在源文件中实例化模板一次,其它源文件引用已经实例化的模板,从而减少编译时间和生成的二进制文件大小。
2、Why
2.1 优化编译时间
模板实例化导致编译器在每次包含模板头文件的时候都进行实例化,增加了编译时间。通过外部模板,可以限制模板实例化的次数,从而减少编译时间。
2.2 解决二进制膨胀
在多个源文件中包含同一个模板头文件,导致生成的二进制文件中包含多次相同的模板实例化,从而增加二进制文件的大小。外部模板可以确保模板实例在二进制文件中只出现一次。
2.3 代码组织
将模板实例化集中在一个源文件中,可以使代码更加整洁和组织化。
3、When
3.1 大型项目
在大型项目中,模板的使用通常非常广泛,使用外部模板可以显著减少编译时间和二进制文件大小。
3.2 模板库
开发模板库时,使用外部模板可以提高库的可用性和效率。
3.3 性能敏感
对于性能敏感的应用,减少编译时间和二进制文件大小是非常重要的,此时可以考虑使用外部模板。
4、How
4.1 在头文件中声明模板
在头文件