LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 268|回复: 0

显式实例化

[复制链接]
发表于 2024-2-18 23:05:51 | 显示全部楼层 |阅读模式
您可以使用显式实例化来创建模板化类或函数的实例化,而不用将其实际用于您的代码。 由于这在创建使用模板进行分发的库 (.lib) 文件时非常有用,因此未实例化的模板定义不会放入对象 (.obj) 文件中。

示例
此代码针对 int 变量和六个项显式实例化 MyStack:

template class MyStack<int, 6>;
该语句创建 MyStack 的实例化,而不保留对象的任何存储。 为所有成员生成代码。

下一行仅显式实例化构造函数成员函数:

template MyStack<int, 6>::MyStack( void );
你可以使用特定类型自变量重新声明函数模板来显式实例化这些模板,如函数模板实例化中的示例所示。

可以使用 extern 关键字来防止自动实例化成员。 例如:

extern template class MyStack<int, 6>;
同样,您可以将特定成员标记为外部且未实例化:

extern template MyStack<int, 6>::MyStack( void );
你可以使用 extern 关键字阻止编译器在多个对象模块中生成相同的实例化代码。 如果调用该函数,则必须在至少一个链接模块中使用指定的显式模板参数来实例化该函数模板。 否则,生成程序时会出现链接器错误。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表