函数模版
语法结构
template <template_parameter_list> [ inline | const_expr] func_name( func_parameter_list){ ... }
template_parameter_list不能为空,多个template parameter之间用','来分隔。template parameter分为两种:type parameter和nontype parameter。
- type paramter
语法形式 typename | class type_name
其中'typename'关键字和'class'关键字是等价的。推荐使用typename,因为模版适用的类型不仅仅是class,用typename表意更准确一些。 - nontype parameter
语法形式 type value_name
type在定义模版的时候必须指定,而value_name在模版体中作为一个常量来使用。在使用模版的时候,传进来的必须是常量表达式,比如常数、const指针或引用以及函数。
常见的函数模版示例
template<typename T> int compare(const T& v1, const T& v2){ if(less<T>()(v1, v2)) return 1; if(less<T>()(v2, v1)) return -1; return 0; }
template<int M, int N> int compare(const char v1[M], const char v2[N]){ return strcmp(v1, v2); }
NOTE: 定义模版的时候,应该尽可能少一些限定,以便适用面更广。