引用模板 [C++ 语言]
本主题演示如何使用以前声明的模板。
template-name < template-arg-list >
备注
template-arg-list 应是以下项的以逗号分隔的列表:
expressiontype-name
所有 expression 参数都必须是常量表达式。 如果没有以前生成的模板的准确匹配项,编译器将创建模板化类或函数的新实例(称为实例化)。 例如,若要引用成员函数模板中定义的 MyStack 类:
MyStack< unsigned long, 5 > stack1;
// Creates a stack of unsigned longs.
MyStack< DWORD, 5 >stack2;
// Uses code created above.
MyStack< char, 6 > stack3;
// Generates new code.
MyStack< MyClass, 6 > stack4;
// Generates stack of MyClass objects.
每个生成的函数模板都将创建其自己的静态变量和成员。
所有模板参数都必须可以在使用它们的点上访问。
上面的语法规则有一种例外情况,即在 ::、. 或 -> 运算符后的表达式中确定成员模板专用化。 在这些运算符之后,可以指定关键字 template。 Visual C++ 偏离了一个标准,在该标准中,template 关键字在此上下文中始终是可选的,但该标准在某些情况下需要它。 模板关键字不能用于专用化,除非前面有以下运算符。
[ :: | ->| .] template template-name < template-arg-list >
例如,下面指定了对成员函数模板 f<T>(int)(类 X 的成员)的 int 专用化的调用并向其传递参数 10。
X::template f<int>(10);