#pragma do_not_instantiate(仅限 C++)
适用的调用
| 编译指示 (pragma) | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
|---|---|---|---|---|
#pragma do_not_instantiate |
✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
用途
阻止对指定的模板声明进行实例化。
您可以使用此编译指示来禁止对提供了定义的模板进行隐式实例化。
语法
参数
- 模板类名
- 不应实例化的模板类的名称。
使用量
如果您正在手动处理模板实例化 (即,指定了 -qnotempinc 和 -qnotemplateregistry ) ,并且指定的模板实例化已存在于另一个编译单元中,那么使用 #pragma do_not_instantiate 可确保在链接步骤期间不会获取多个符号定义。

类模板特殊化上的 #pragma do_not_instantiate 被视为模板的显式实例化声明。 此编译指示提供了由 C++11 标准引入的显式实例化声明功能的一部分功能。 仅出于兼容性目的而提供,不建议使用。 新应用程序应改为使用显式实例化声明。

您还可以使用 -qtmplinst 选项来禁止对多个编译单元的模板声明进行隐式实例化。 请参阅 -qtmplinst (仅限 C + +)。
示例
下面显示了 pragma 的用法:
#pragma do_not_instantiate Stack < int >