模板元编程之函数模板(一)

发布时间 2023-06-10 12:32:48作者: TechNomad

一、概述

函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,换句话说函数模板代表一个函数家族,它的表示看起来和普通的函数很相似,唯一的区别就是有些函数元素是未确定的,这些元素将在使用时被参数化。

下面是一个返回两个值中最大者的函数模板

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

这个模板定义了一个“返回两个值中最大者”的函数家族,两个值是通过函数参数a和b传递给该函数模板的;而参数的类型还没确定,用模板参数T来代替。

模板参数必须用如下形式的语法来声明:

template <用逗号隔开的参数列表>

在上面的程序中,类型参数是T,可以使用任何标识符作为类型参数的名称,但使用T已经成为了一种惯例,类型参数T表示的是,调用者调用这个函数时所指定的任意类型,可以使用任何类型(基本类型,类等)来实例化该类型参数,只要所用类型提供模板使用的操作就可以,例如上面的这个例子,类型T需要支持operator<,因为a和b就是使用这个运算符来比较大小的。