模板函数,模板函数重载,显示具体化模板,实例化
来源:互联网 发布:php static class 编辑:程序博客网 时间:2024/05/22 12:23
编译器在选择原型时,非模板版本函数优先于显示具体化和模板版本函数,而显示具体化优先于使用常规模板函数版本。
1 函数模板
声明与定义时均需加上template <class T>说明为函数模板。
eg . template <typename T >
declaration:eg.template <typename T > void swap(T & a1 ,T & a2) ; 函数模板声明。
definition : template <class T >void swap( T &a1 ,T & a2)
{ T temp ;
temp = a1 ;
a1 = a2 ;
a2 = temp ;
}
definition : template <class T > void swap( T &a1 ,T & a2) { T temp ; temp = a1 ;a1 = a2 ;a2 = temp ;}
2 模板函数重载版本。
3显示具体化模板函数 以 template <> 打头
template <> void swap<job> (job & ,job &)其中<job>是可选的,即可写成template <> void swap(job & ,job &) job可为某种类
在代码中包含函数模板本身不会生成函数定义,它只是一个用于生成函数定义的方案。编译器使用模板为特定类型生成函数定义时(即使用具体类型的参数来调用模板函数时),得到的是模板实例,模板并非函数定义,但使用具体类型的模板实例是函数定义。这种实例化方式为隐式实例化。
C++也允许显式实例化。即提前指明类型。并在前面加上template。
template void swap<int>(int ,int ) ; 显式实例化。
template <> void swap<int >(int , int ) 显式具体化。
在同一个文件中使用同一种类型的显示实例化和显示具体化将出错。
C++11新特性
template <class T1,class T2>
void ft(T1 x ,T2 y)
{
.....
?type? xpy = x+ y ;
.....
}
1.因为不知道x+y的类型,所以C++11 引入了decltype
decltype(x) y , 让y和x的类型一致。
即上面的模板函数可以, decltype(x+y) xpy ; xpy = x+y ; 或者 decltype (x+y) xpy=x+y ;
2.template<class T1 ,class T2>
?type? gt(T1 x , T2 y)
{
.....
return x+y ;
.....
}
返回类型是decltype(x+y),但是此时还未声明参数x,y,它们不在作用域内,所以C++引入了后置返回类型。
上面函数可以改为
auto gt(T1 x ,T2 y)-> decltype(x+y)
{
return x+y ;
}
举例:
auto h(float x ,float y) -> double ; 也可直接指明类型
- 模板函数,模板函数重载,显示具体化模板,实例化
- 函数模板、模板重载、函数模板显示具体化(explicit specialization)
- C++函数模板 模板实例化、具体化
- C++函数模板 模板实例化、具体化
- C++函数模板 模板实例化、具体化
- C++函数模板 模板实例化、具体化
- C++函数模板 模板实例化、具体化
- C++函数模板 模板实例化、具体化
- C++ 函数模板 实例化和具体化
- 函数模板和类模板的实例化和具体化
- 函数模板和类模板的实例化和具体化
- 函数模板和类模板的实例化和具体化
- 泛型编程::函数模板及其重载、实例化和具体化
- 关于模板函数具体化实例化的问题
- C++函数模板的具体化和实例化
- 关于函数模板以及具体化
- 函数模板和类模板的实例化和具体化 - 1
- 函数模板和类模板的实例化和具体化 - 2
- 1027. 打印沙漏(20)--Python
- BigDecimal加减乘除运算
- 网易云容器服务基于Kubernetes的实践探索
- 《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
- QT QAbstractSocket类
- 模板函数,模板函数重载,显示具体化模板,实例化
- 2017年8月反思
- 洛谷2312:解方程(初等数论)
- myeclipse配置gradle插件
- git无法上传jar包问题
- learning R with swirl-sequences of numbers
- java新IO---文件锁
- 泪滴攻击
- JavaEE篇-不定时更新