标签:
函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或者double)替换。通过将类型作为参数,传递给模板,可使编译器生成该类型的函数。
函数模板允许以任意类型的方式来定义函数。例如,可以这样建立一个交换函数的模板:
template <typename T> void Swap(T &a, T &b) { T temp; temp = a; a = b; b = temp; }
模板并不创建任何函数,而只是告诉编译器如何定义函数。上面代码的关键字typename和关键字class都是可以的,但是推荐使用关键字typename。
要让编译器知道程序需要一个特定形式的交换函数,只需要在程序中使用Swap()函数即可。编译器将检查所使用的参数类型,并生成相应的函数。
#include <iostream> template <typename T> void Swap(T &a, T &b); using namespace std; int main() { int i = 10; int j = 20; Swap(i, j); cout << "i = " << i << endl; cout << "j = " << j << endl; double x = 24.5; double y = 30.7; Swap(x, y); cout << "x = " << x << endl; cout << "y = " << y << endl; return 0; } template <typename T> void Swap(T &a, T &b) { T temp; temp = a; a = b; b = temp; }
函数模板不能缩短可执行程序,如上面的代码,最终仍将由两个独立的函数定义,并且最终的代码并不包含任何的模板,而只包含了程序生成的实际函数。使用模板的好处是,它使生成多个函数定义更简单、更可靠。
但是:同一个函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用该函数模板。但是可以重载的函数模板。
http://www.cnblogs.com/lidan/archive/2012/02/04/2338677.html
标签:
原文地址:http://www.cnblogs.com/stemon/p/4593106.html