#include <iostream> #include <iomanip> using namespace std; template<class T>T larger(T a, T b); //function prototype int main() { 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 value1 = 35; int value2 = 45; cout << "Larger of " << value1 << " and " << value2 << " is " << larger(value1, value2) << endl; long a = 9; long b = 8; cout << "Larger of " << a << " and " << b << " is " << larger(a, b) << endl; return 0; } //template for function to return the larger of two values template<class T>T larger(T a, T b) { return a > b ? a : b; }
说明:模板定义的原型(prototype)必须放在调用任何函数实例之前,这个规则与一般的函数相同,因此把模板原型定义为:
template<class T>T larger(T a,T b); //function prototype
这实际上与模板定义的第一行相同,只是在语句的最后有一个分号。在main函数中,第一次调用函数larger(),如下面的语句所示:
cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl;
执行这个语句后,编译器会自动创建接受double类型的参数的larger()版本,接着调用该版本,下一个语句也需要接受double类型的larger()版本:
cout << "Larger of 3.5 and 4.5 is " << larger(3.5,4.5) << endl;
编译器将使用前一个语句生成的版本。
下一个使用larger()的语句如下;
int value1 = 35;
int value2 = 45;
cout << "Larger of " << value1 << " and " << value2 << " is "
<< larger(value1, value2)
<< endl;
由于这次要调用参数类型为int的函数,因此创建一个larger()新版本,接受int参数。
larger()函数最后一次调用有两个long类型参数的新版本:
long a = 9;
long b = 8;
cout << "Larger of " << a << " and " << b << " is "
<< larger(a, b)
<< endl;
这次将获得带有两个long类型参数的新版本,这个程序从一段源代码中获得了总共三个不同版本的larger()(其对象代码有所不同)