C++函数模板
来源:互联网 发布:江南大学网络教育好吗? 编辑:程序博客网 时间:2024/05/18 12:43
一、函数模板的概念
函数模板是通用的函数描述,使用泛型来定义函数,其中的泛型可用具体的类型(如int, double)替换。通过将类型作为参数传递给模板, 可使编译器生成该类型的函数。由于模板允许以泛型的方式编写程序, 因此也被称为通用编程。由于类型是用参数表示的,因此模板特性也被称为参数化类型。
模板并不创建任何函数, 只是告诉编译器如何定义函数。
函数模板不能缩短可执行程序,最终生成的代码不包含任何模板,而只是包含了为程序生成的实际函数。使用模板的好处是,它使生成多个函数定义更简单,更可靠。
通常将模板放在头文件中,并在需要使用模板的文件中包含头文件。
二、函数模板的使用
1. 模板原型声明
template <typename T> //typename 是关键字 T 是模板名称
void Swap (T &a, T &b)
2. 建立一个模板
template <typename T> //建立一个模板,并将类型命名为T。
void Swap(T &a, T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
3. 具体参数类型传递
调用函数时, 将具体参数类型传递给编译器,由编译器生成该函数的int 类型的定义。
int i=10;
int j=20;
swap( i,j);
三、重载的模板
需要多个对不同类型使用同一种算法时可以使用模板。但是并非所有的类型都使用完全相同的算法,这时可使用重载模板。
template <typename T>
void Swap( T&a, T &b);
template <typename T>
void Swap( T *a, T *b, int n);
四、显示具体化( explicit specialization)
显示具体化是一个具体化函数定义,其中包含所需的代码,当编译器找到与函数调用匹配的具体化定义时,将使用该定义,而不再寻找模板。
1.c++98标准定义:
对于给定的函数名,可以有非模板函数,模板函数和显示具体化模板函数以及它们的重载函数。
显示具体化的原型和定义以template<>打头,并通过名称来指出类型。
优先级是:非模板 > 显示具体化 > 模板函数
2. 显示具体化定义
template <> void swap< int> (int &, int &)
template <> void swap (int &, int &) //简化版
五、具体化
1. 隐式实例化(implicit instantiation):在函数调用时编译器生成相应的一个实例。
template <typename T> //typename 是关键字 T 是模板名称
void Swap (T &a, T &b)
2. 显示实例化(explicit instantiation) :直接命令编译器创建创建特定的实例。
template void Swap <int> (int , int) //没有尖括号
3.显示具体化(explicit specialization):
template <> void swap< int> (int &, int &)
- 【c/c++】函数模板和模板函数
- C/C++ 函数模板
- c++:函数模板
- 【C++】函数模板
- 【c++】函数模板
- C语言函数模板
- C++:函数模板
- 【C++】模板函数总结!!!
- C/C++:函数模板与类模板
- [C/C++]模板函数与模板类
- 学习C++模板---模板函数
- Linux C/C++ 模板:函数模板
- C++,template,类模板和函数模板
- C++:函数模板、类模板及其特化
- C++---函数模板与类模板
- C++_函数模板基础知识
- C语言实现函数模板
- C++_函数模板基础知识
- 类
- RecyclerView和ListView的异同
- 2016.10.5 普及总结 暨 2016 Aug.~Sep. 总结
- 类的继承
- HDU2227 Find the nondecreasing subsequences(树状数组+DP+离散化)
- C++函数模板
- 《机遇与挑战——中国机器人产业发展的深度思考》
- AsyncTask
- HTML、CSS、JS全拼
- 类的多态
- 排序算法总结
- 关于phpmyadmin的密码登录
- HDU 2601 An easy problem
- Android动态加载dex技术初探