C++函数模板
2015-06-22 12:00
323 查看
函数模板是通用的函数描述,也就是说,它们使用泛型来定义函数,其中的泛型可用具体的类型(如int或者double)替换。通过将类型作为参数,传递给模板,可使编译器生成该类型的函数。
函数模板允许以任意类型的方式来定义函数。例如,可以这样建立一个交换函数的模板:
模板并不创建任何函数,而只是告诉编译器如何定义函数。上面代码的关键字typename和关键字class都是可以的,但是推荐使用关键字typename。
要让编译器知道程序需要一个特定形式的交换函数,只需要在程序中使用Swap()函数即可。编译器将检查所使用的参数类型,并生成相应的函数。
函数模板不能缩短可执行程序,如上面的代码,最终仍将由两个独立的函数定义,并且最终的代码并不包含任何的模板,而只包含了程序生成的实际函数。使用模板的好处是,它使生成多个函数定义更简单、更可靠。
但是:同一个函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用该函数模板。但是可以重载的函数模板。
http://www.cnblogs.com/lidan/archive/2012/02/04/2338677.html
函数模板允许以任意类型的方式来定义函数。例如,可以这样建立一个交换函数的模板:
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
相关文章推荐
- C++类构造函数初始化列表,子类向父类传参数
- c++ 子类调用父类有参构造函数
- C语言学习笔记(四)——函数(重点)
- 转载:c++ sort用法
- 用二分法求下面方程在(-10,10)之间的根:2x^3-4x^2+3x-6=0
- c++中的explicit
- C++ new A和new A()的区别详解
- c++ auto_ptr(memory)
- Effective C++ 条款9
- 【读书笔记:C++ primer plus 第六版 中文版】第5章 循环和关系表达式
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号03-1 Source code
- c语言头文件存在的合理性
- VC++中subclassdlgitem函数的功能、用法及注意事项
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号03-0 Source code
- C++ MFC实现CVsflexgridn1存放字符操作
- C++ 模态对话框与非模态对话框
- C语言中的序列点和副作用
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号02-4 Source code
- 中国大学MOOC-翁恺-C语言程序设计习题集 题目号02-3 Source code
- 如何在visual c++ 6.0下调试c语言