显式实例化

您可以使用显式实例化来创建模板化类或函数的实例化,而不用将其实际用于您的代码。 由于这在创建使用模板进行分发的库 (.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 关键字阻止编译器在多个对象模块中生成相同的实例化代码。 如果调用该函数,则必须在至少一个链接模块中使用指定的显式模板参数来实例化该函数模板。 否则,生成程序时会出现链接器错误。

注意

专用化中的 extern 关键字仅适用于在类主体外定义的成员函数。 类声明中定义的函数被视为内联函数,并且始终实例化。

另请参阅

函数模板