使用C++的模板可以轻松地解决上述问题在这种情况下,数据类型本身就是一个参数例如max函数的模板可以定义为:template<classT>T max(T x, T y)(returnx>y?x:y;)关键字template后的尖括号表明,max函数要用到一个叫做工的参数(我们称作模板参数),而这个参数是一种类型。该模板的含义就是无论参数T为int、char或其他数据类型(包括类类型),函数max的语意都是对x和y求最大值。62026/9/17
2026/9/17 6 • 使用C++的模板可以轻松地解决上述问题。 在这种情况下,数据类型本身就是一个参数, 例如max函数的模板可以定义为: template <class T> T max(T x, T y) { return x > y ? x : y; } 关键字template后的尖括号表明,max函数 要用到一个叫做T的参数(我们称作模板参 数),而这个参数是一种类型。该模板的含 义就是无论参数T为int、char或其他数据类 型(包括类类型),函数max的语意都是对 x和y求最大值
这样定义的max代表了一类具有相同程序逻辑的函数,它不是一个真正的函数,被称为函数模板函数模板本身是不被编译的,所以函数模板不能直接使用,必须被实例化后,也就是给定类型参数T后才能使用:void main()doublea=1.0,b;b = max(a, 2.0)在上面的代码中,函数模板接受了一个隐含的参数:double,编译器自动将函数模板扩展成一个完整的关于double数据比较大小的函数,然后再在函数模板被调用的地方产生合适的函数调用代码。由函数模板实例化出的函数称为模板函数。2026/9/17
2026/9/17 7 • 这样定义的max代表了一类具有相同程序逻辑的 函数,它不是一个真正的函数,被称为函数模板。 函数模板本身是不被编译的,所以函数模板不能 直接使用,必须被实例化后,也就是给定类型参 数T后才能使用: void main() { double a = 1.0, b; b = max(a, 2.0); } 在上面的代码中,函数模板接受了一个隐含的参 数:double,编译器自动将函数模板扩展成一个 完整的关于double数据比较大小的函数,然后再 在函数模板被调用的地方产生合适的函数调用代 码。由函数模板实例化出的函数称为模板函数