Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

7.2.2 整个类实例化

编译器通常是分别实例化各个模板类成员,因此,编译器仅实例化程序中使用的成员。仅用于调试器的方法会因此而不正常地实例化。

可使用两种策略确保调试成员可供调试器使用。

  • 首先,编写使用模板类实例成员(否则无用)的非模板函数,不需要调用该函数。

  • 其次,使用 -template=wholeclass 编译器选项,该选项指示编译器实例化模板类的所有非模板非内联成员(如果实例化这些相同成员中的任何一个)。

ISO C++ 标准允许开发者编写模板类,对于这些类,可能并不是所有成员都可以合法使用某个给定模板参数。只要非法成员未被实例化,程序就仍然完好。ISO C++ 标准库使用了这种技术。但是,-template=wholeclass 选项会实例化所有成员,因此不能用于此类使用有问题的模板参数实例化的模板类。