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,机器人学等机器人行业常用技术资料。