函数模板

函数模板能够创建一个通用的函数,以支持多种类型的形参,避免重载函数的重复设计。

用法

函数模板的通式为:

template<typename(或class) T>
<返回类型><函数名>(参数表)
{
    函数体
}

template是定义模板的关键词,之后的尖括号不能省略。typename的作用和class类似,都是声明之后的符号为一个类型标识符,这样之后在定义这个函数时,不管传入什么类型的参数,都能通过参数数据类型标识符来说明,使这个变量能适应不同的数据类型,提高函数之后的兼容性。下面给出实现最小值函数的例子来详细说明:

template<typename T>
T min(T a, T b)
{
    return a < b ? a : b;
}

函数模板仅仅是声明了一个通用的函数描述,而不能直接运行,在使用时,我们要根据实参的类型将用相应的数据类型取代类型参数标识符之后,函数才能正常使用,如:

int main()
{
    int a = 1, b = 2;
    int min = (a, b);
}

模板函数

模板函数是函数模板的实例化使用,模板函数的生成就是将函数模板的类型参数实例化的过程。

局限性

一方面,我们编写的模板函数很可能无法处理某些类型,如上述最小值函数输入数组便不成立;另一方面,有时候通用化是很有意义的,但C++的语法标准并不支持,这可以通过一定的手段规避,方法较为复杂,有兴趣可阅读C++ primer plus来了解。

results matching ""

    No results matching ""