template <classT> T larger(const T array[], int count) { cout << "template overload version for arrays" << endl; T result = array[0]; for (int i = 1; i < count; i++) if (array[i] > result) result = array[i]; return result; }
//程序示例3:重载函数模板 #include<iostream> using std::cout; using std::endl;
//函数模板声明 template <classT> T larger(T a, T b);
template <classT> T larger(const T array[], int count);
intmain() { cout << endl; cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl; cout << "Larger of 3.5 and 4.5 is " << larger(3.5, 4.5) << endl;
int a_int = 35; int b_int = 45; cout << "Larger of " << a_int << " and " << b_int << " is " << larger(a_int, b_int) << endl;
long a_long = 9; long b_long = 8; cout << "Larger of " << a_long << " and " << b_long << " is " << larger(a_long, b_long) << endl;
cout << "Larger of " << a_long << " and " << b_long << " is " << *larger(&a_long, &b_long) << endl;
double x[] = {10.5, 12.5, 2.5, 13.5, 5.5}; cout << "Largest element has the value " << larger(x, sizeof(x) / sizeof(x[0])) << endl;
return0; }
//函数模板定义 template <classT> T larger(T a, T b) { cout << "standard version" << endl; return a > b ? a : b; }
template <classT> T larger(const T array[], int count) { cout << "template overload version for arrays" << endl; T result = array[0]; for (int i = 1; i < count; i++) if (array[i] > result) result = array[i]; return result; }
带有多个参数的模板
前面使用了带有一个参数的函数模板,也可以在模板中使用多个参数。
第二个类型参数的典型应用是提供控制函数模板中返回类型的方式。
可以为函数 larger() 定义另一个模板,允许独立于函数参数类型来指定返回类型:
1 2 3 4
template <classTReturn, classTArg> TReturn larger(TArg a, TArg b){ return a > b ? a : b; }