C++函数模板的使用

函数模板的基本形式

函数模板的语法示例:

template<typename T>
T abs(T x){
    return x<0?-x:x;
}

其中T可以指代任何类型。

函数模板的重载

函数模板的重载与普通函数的重载形式上是一样的。

template<typename T>
T add(T a,T b)
{
    return (a+b);
}

template<typename T>
T add(T a,T b,T c)
{
    T h = add(a,b);
    return add(h,c);
}

当调用add 函数时,编译器会根据函数形参的类型和个数选择相应的函数模板生成相应的函数体。
比如:

int a = 1;
int b = 2;
add(a,b);//该语句实际会调用int add(int a,int b){return (a+b)}
float a = 1;
float b = 2;
add(a,b);//该语句实际会调用float add(float a,float b){return (a+b)}
double a = 1;
double b = 2;
double c = 2;
add(a,b,c);
//该语句实际会调用下面的函数
//double add(double a,double b,double c)
//{
//    double h = add(a,b);
//    return add(h,c);
//}

给函数模板传入常量的形式

当需要给函数模板传入常量形参的时候,其使用形式有一些差异。

template<typename T,uint8_t _VALUE_>
T add(T a,T b)
{
    return (a+b+_VALUE_);
}
template<typename T,uint8_t _VALUE_>
T add(T a,T b,T c)
{
    T h = add<T,_VALUE_>(a,b);
    return add<T,_VALUE_>(h,c);
}

上面的函数模板中都传入了一个_VALUE_值,所以在使用add(a,b) 函数时要这样写add<uint8_t,15>(a,b)。这样的话是需要自己显式指定模板中T所指代的类型。

float a = -15.5;
float b = -15.5;
float c = -15.5;
int main(int argc, char** argv)
{
    int n = -1;
    cout << add<float,15>(a,b,c)  << endl;
    return 0;
}

关注公众号《首飞》回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2,机器人学等机器人行业常用技术资料。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

首飞爱玩机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值