c++ (五) 函数模板

1.重载模板

c++函数模板,可以理解为java中的泛型。优点是节省了代码量,提高代码效率,减少了函数定义时可能发生的错误。和函数重载一起可以实现“重载模板”

template<typename T>
void add(T a, T b);

template<typename T>
void add(T a, T b, T c);

int main() {
    using namespace std;
    add(1, 2);
    add(1, 2, 3);
    return 0;
}

template<typename T>
void add(T a, T b) {
    int r = a + b;
    cout << r << endl;
}

template<typename T>
void add(T a, T b, T c) {
    int r = a + b + c;
    cout << r << endl;
}

2.隐式实例化、显式实例化和显式具体化

编译器使用模板为特定类型生成函数定义时,就是模板的实例化过程。分为以下三种方式:

//.模板定义
template<typename T>
T add (T a, T b) {
    int r = a + b;
    return r;
}
//2.显式实例化.定义了具体类型
template int add<int>(int a, int b);

//3.显式具体化.定义了具体类型和不同的方法实现
template<> double add<double>(double c, double d) {
    double r = c + d;
    return r;
}

//调用方式
int main() {
    using namespace std;
    cout << (int)add('A','B') << endl;//1.隐式实例化,无需再声明类型,自动推断
    cout << add(1, 2) << endl;
    cout << add(20.9, 30.1) << endl;
    return 0;
}

3.三种具体化在函数调用的优先级,遵循以下原则:

  对于第三代具体化,C++98标准选用了下面的方法 

  对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及他们的重载版本。

  显示具体化的原型和定义应以template<>打头,并通过名称支出类型

  具体化优先于常规模板,而非模板函数优先于具体化和常规模板

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值