函数模板可以被重载。如:
// 类模板Array的定义
template <typename Type>
class Array { /* . . . */ };
// main()的三个函数模板声明
template <typename Type>
Type min( const Array<Type>&, int );// #1
template <typename Type>
Type min( const Type*, int ); // #2
template <typename Type>
Type min( Type, Type ); // #3
调用:
int main(){
Array<int> iA(1024); // 类实例
int ia[1024];
// Type==int; min( const Array<int>&, int )
int ival0 = min( iA, 1024 );
// Type==int; min( const int*, int )
int ival1 = min( ia, 1024 );
// Type==double; min( double, double )
double dval0 = min( sqrt( iA[0] ), sqrt( ia[0] ) );
return 0;
}
在某些情况下,即使对于一个函数调用,两个不同的函数模板都可以实例化,但是该函数调用仍然可能不是二义的。如:
template <typename Type>
Type sum( Type*, int );
template <typename Type>
Type sum( Type, int );
int ia[1024];
// Type==int; sum<int>( int*, int ); or
// Type==int*; sum<int*>( int*, int); ??
int ival1 = sum<int>( ia, 1024 );
上面的调用没有二义性,该模板是用第一个模板定义实例化的。为该实例选择的模板函数是最特化的(most specialized)。因此,Type的模板实参是int而不是int*。
一个模板要比另一个更特化,两个模板必须有相同的名字、相同的参数个数,对于不同类型的相应函数参数,如上面的T*和T,一个参数必须能接受另一个模板中相应参数能够接受的实参的超集。
分享到:
相关推荐
(1)输人并运行所给的参考程1...(4)使用重载函数模板重新实现上小题中的函数Maxl。 (5)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。 (6)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
函数模板 建立一个通用的函数,函数类型和形参不具体指定,用一个虚拟的类型代表。 只要是函数体是相同的就可以用这个模板代替。 (只适用于函数的参数个数相同而类型不同,且函数体一致的情况,如果参数个数不同,则...
一 函数重载 二函数模板 三类模板 的说明及代表代码
C++函数重载的例子解析,C++函数模板重载
C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体
C++学习笔记--函数指针 函数指针 程序运行期间。每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数入口地址赋给一个指针变量,使该指针变量...
C++学习路线(csdn)————程序
谭浩强老师c++课本函数模板例题,c++函数模板使用,供大家学习使用。
个人网课学习笔记
c++入门语法及使用 - c++学习路线(csdn)————程序
Pascal转C++学习笔记——1.基本知识
其中,template为关键字,表示定义一个模板(可以是函数模板或类模板),尖括号表示模板参数,模板类型参数使用关键字class或typename开始,其后是一个用户定义的合法的标识符。 如果用户在调用函数模板时显式标识...
练习 C++中函数模板、类模板的创建和使用方法。 (1) 理解模板的作用。 (2) 学习函数模板及其声明方法,掌握模板函数及其生成方法。 (3) 学习函数模板的两种不同的实例化方法。 (4) 学习类模板的声明与使用方法。
第八章函数探幽 内联函数 默认参数 函数重载 函数模板
关于学习C++《STL模板库》以及学习《STL源码剖析》的学习笔记。
P167~184C++类和函数模板学习笔记.docx
模板函数重载匹配规则可以引用《c++ primer》中的一段话来总结: 对于一个调用,其候选函数包括所有模板实参推断成功的函数模板实例。 候选的函数模板总是可行的,因为模板实参推断会排除任何不可行的模板。 与...
Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip
c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数