大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > C++函数模板详细讲解

C++函数模板详细讲解(1)

关键词:函数模板C++  阅读(1345) 赞(13)

[摘要]本文是对C++函数模板的讲解,对学习C++编程技术有所帮助,与大家分享。

函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,也就是说,函数模板代表一个函数家族,这些函数的元素是未定的,在使用的时候被参数化。

下面举一个简单的例子:

定义模板:

template<typename T>
inline T const& max(T const& a, T const& b)
{
    return a < b ? b : a;
}

这个模板定义指定了一个“返回两个值中最大者”的函数家族,这两个值通过函数参数a , b传递给函数模板的,而参数的类型还没有确定,用模板参数T来代替。
其中,typename可以用class来代替,但是建议使用typename

完整代码如下:

#include<iostream>
#include<string>
using namespace std;

template<typename T>
inline T const& max(T const& a, T const& b)
{
    return a < b ? b : a;
}

int main()
{
    int i = 42;
    cout<<"max(7, i): "<<::max(7, i)<<endl;

    double f1 = 3.4;
    double f2 = 5.6;
    cout<<"max(f1, f2): "<<::max(f1, f2)<<endl;
    
    string s1 = "mathematics";
    string s2 = "math";
    cout<<"max(s1, s2): "<<::max(s1, s2)<<endl;
    cin.get();  
    return 0;
}

实参的选择:

模板参数可以根据我们传递的实参来决定,如果我们传递了两个int给参数类型T const&,那么C++编译器得出结论:每个T都必须正确的匹配,如果此时传递的实参为:max(4, 4.2),则出现编译错误

有3种方法来处理上面的错误:

1、对实参进行强制类型转换,使它们可以互相匹配:

max(static_cast<double>(4), 4.2);

2、显示指定(或限定)T的类型:

max<double>(4, 4.2)

3、指定两个参数可以具有不同的类型

模板参数

函数模板有2种类型的参数:

1、模板参数:位于函数模板名称的前面,在一对尖括号内部进行声明:

template<typename T>

2、用参数:位于函数模板名称之后,在一对圆括号内部进行声明:

...max(T const& a, T const& b)

可以声明任意数量的模板参数,在函数模板的内部,不能指定缺省的参数。

template<typename T1, typename T2>
inline T1 max(T1 const& a, T2 const& b)
{
    return a < b ? b : a;
}
...
max(4, 4.2);

可以引入第三个模板实参类型,来定义函数模板的返回类型:

«上一页123下一页»


相关评论