跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:C++ 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
函数模板描述了仅用参数或返回值的类型来区分的一组相关函数。
使用模板之前,请先声明。以下示例中的声明提供了使用模板所需的足够信息,但没有提供实现模板所需的足够信息。
template <class Number> Number twice( Number original );
在此示例中,Number 是模板参数,它指定模板描述的函数范围。更具体地说,Number 是模板类型参数,在模板定义中使用它表示确定的模板使用位置处的类型。
如果要声明模板,请先定义该模板。定义提供了实现模板所需的足够信息。以下示例定义了在前一个示例中声明的模板。
template <class Number> Number twice( Number original ) { return original + original; }
因为模板定义通常出现在头文件中,所以模板定义必须在多个编译单元中重复。不过所有的定义都必须是相同的。该限制称为一次定义规则。
声明后,模板可以像其他函数一样使用。它们的使用由命名模板和提供函数参数组成。编译器可以从函数参数类型推断出模板类型参数。例如,您可以按以下方式使用以前声明的模板:
double twicedouble( double item ) { return twice( item ); }
如果模板参数不能从函数参数类型推断出,则调用函数时必须提供模板参数。例如:
template<class T> T func(); // no function arguments int k = func<int>(); // template argument supplied explicitly