函数模板通过template定义实现泛型编程,支持单或多类型参数,如template T max(T a, T b)和template auto add(T a, U b) -> decltype(a + b),可自动推导或显式指定类型,提升代码复用性。

在C++中,函数模板是一种允许使用泛型编程的机制,可以编写与数据类型无关的函数。通过函数模板,可以用同一套代码处理不同的数据类型,提高代码复用性和灵活性。
函数模板的基本定义语法
函数模板使用 template 关键字进行定义,后面跟着模板参数列表,然后是函数声明和定义。基本语法如下:
templateT max(T a, T b) {
return (a > b) ? a : b;
}
说明:
小型企业入门套件(The Small Business Starter Kit)提供了一个商业宣传网站的完整演示,他适合中小型企业。使用他创建的网站支持自定义模板,具有先进的功能,包括:内容和数据管理的SQL和XML数据源整合。该源码包含C#和VB两个版本,只有前台部分源码,微软官方截止到51aspx发布源码时还没有提供后台代码。小型企业网站入门套件的关键页面包括:产品分类显示新闻发布显示商户认证
-
template
:声明一个模板,T 是类型参数(也可以用 class 替代 typename,两者在此等价)。 - T 可以是任何类型,比如 int、double、string 等,在调用时自动推导。
- 函数返回类型、参数类型都使用 T,表示它们是泛型的。
多个模板参数的定义方式
函数模板可以支持多个类型参数。例如:
立即学习“C++免费学习笔记(深入)”;
templateauto add(T a, U b) -> decltype(a + b) {
return a + b;
}
说明:
- 这里使用了两个类型参数 T 和 U,适用于两个不同类型的操作数。
- 返回类型使用尾置返回类型 -> decltype(a + b),以便正确推导结果类型。
函数模板的使用示例
定义后,可以直接调用函数模板,编译器会根据传入的参数自动推导类型:
int main() {int x = 5, y = 10;
double a = 3.14, b = 2.71;
std::cout std::cout
std::cout return 0;
}
注意:只要类型支持对应的操作(如 > 或 +),函数模板就能正常工作。
显式指定模板类型
有时可以手动指定模板类型,特别是在无法自动推导时:
max这会把 int 类型的参数转换为 double 进行比较。
基本上就这些。函数模板是C++泛型编程的基础,掌握其定义和使用方法对编写高效、通用的代码很有帮助。








