C++如何使用模板(template)函数_C++泛型编程模板函数写法指南

老涛吖_8615

老涛吖_8615

2025-11-13

872人浏览

原创

模板函数通过template实现泛型编程,支持自动类型推导与显式指定类型,可重载并特化处理特定类型,提升代码复用性与灵活性。

c++如何使用模板(template)函数_c++泛型编程模板函数写法指南

在C++中,模板函数是实现泛型编程的核心工具之一。它允许我们编写与数据类型无关的通用函数,从而提高代码复用性和灵活性。使用模板函数,可以对多种类型执行相同逻辑,而无需为每种类型单独重写函数。

模板函数的基本语法

定义一个模板函数需要使用 template 关键字,后跟模板参数列表,然后是函数定义。

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

上面的例子中,typename T 表示T是一个类型占位符,在调用时会被实际类型自动推导替换(如 int、double、string 等)。

也可以使用 class 替代 typename,两者在此场景下等价:

template <class t>
T max(T a, T b) { ... }
</class>

如何调用模板函数

模板函数可以在不显式指定类型的情况下被调用,编译器会根据传入参数自动推导类型:

int x = 5, y = 10;
double a = 3.14, b = 2.71;
<p>int m1 = max(x, y);     // 推导为 max<int>
double m2 = max(a, b);  // 推导为 max<double></double></int></p>

当然,也可以显式指定模板类型:

max<double>(x, a);  // 显式使用 double 类型版本
</double>

这在参数类型不一致但希望统一处理时特别有用。

支持多个模板参数

模板函数可以接受多个类型参数,适用于更复杂的泛型逻辑:

template <typename t typename u>
auto add(T a, U b) -> decltype(a + b) {
    return a + b;
}
</typename>

这里使用了尾置返回类型 decltype(a + b) 来让返回值类型由两个参数相加的结果决定。C++14 后也可简化为:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
template <typename t typename u>
auto add(T a, U b) {
    return a + b;
}
</typename>

这样就能支持 int + double、float + long 等混合类型运算。

模板函数的重载与特化

你可以为特定类型提供专门的实现——称为模板特化。

// 通用版本
template <typename t>
void print(T value) {
    std::cout // 全特化:针对 const char<em>
template 
void print(const char</em> str) {
std::cout </typename>

当调用 print("hello") 时,会匹配特化版本。注意全特化需在原始模板同一作用域内定义。

此外,函数模板本身也支持重载:

template <typename t>
void func(T x);           // 版本1
<p>template <typename t>
void func(T* x);          // 版本2:指针重载</typename></p>
<p>void func(int x);         // 普通函数重载</p></typename>

调用时编译器会根据参数选择最匹配的版本。

基本上就这些。掌握模板函数写法是进入C++高级编程和STL源码理解的关键一步。合理使用模板,能写出高效、安全、可维护的通用代码。不复杂但容易忽略的是类型推导规则和特化语法,建议多写示例加深理解。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++ 代码复用 作用域

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

3200

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

269

24

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.31

3271

5

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.31

554

9

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2026.02.12

542

19

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

6999

3

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

2024.04.28

7167

8

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

2025.10.23

844

4

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

6999

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle Wrapper 使用与安全指南
Gradle Wrapper 使用与安全指南

共0课时 | 0人学习

Golangci-lint命令行使用演示
Golangci-lint命令行使用演示

共0课时 | 0人学习