登录/注册

函数模板

更多

函数模板(Function Template)

函数模板是 C++ 中实现泛型编程的核心工具,它允许编写独立于数据类型的通用函数。编译器会根据调用时传入的参数类型,自动生成对应的函数版本。


基本语法

template <typename T>  // 或 template <class T>
返回值类型 函数名(参数列表) {
    // 函数体(使用 T 作为通用类型)
}

示例:求最大值的通用函数

#include <iostream>
using namespace std;

// 声明函数模板
template <typename T>
T getMax(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    // 调用示例
    int i1 = 5, i2 = 3;
    double d1 = 2.5, d2 = 4.7;

    // 编译器自动推导 T 为 int
    cout << getMax(i1, i2) << endl;  // 输出:5

    // 显式指定 T 为 double
    cout << getMax<double>(d1, d2) << endl; // 输出:4.7

    return 0;
}

关键特性

  1. 类型安全
    比宏(#define)更安全,编译器会检查类型合法性。

  2. 避免重复代码
    无需为不同数据类型重写相同逻辑(如 getMax_int(), getMax_double())。

  3. 编译时实例化
    编译器在调用时生成具体类型的函数(如 getMax<int>())。


使用注意事项

  1. 模板定义需在头文件中
    通常将模板代码放在 .hpp.h 文件中(因编译机制需看到完整定义)。

  2. 类型约束
    模板中的操作必须支持所用类型(如 a > b 要求 T 类型可比较)。

  3. 多类型参数
    支持多个泛型类型:

    template <typename T1, typename T2>
    void printPair(T1 a, T2 b) {
       cout << a << ", " << b << endl;
    }

进阶用法


总结

特性 说明
泛化能力 一份代码适配多种类型
编译时多态 根据调用类型生成具体函数
类型安全 强类型检查,优于宏
减少冗余 避免针对不同数据类型的重复编码

函数模板是 C++ 泛型编程的基石,广泛应用于 STL(如 vector<T>, sort() 等)。掌握它能显著提升代码复用性和灵活性!

SPI回调函数模板错误?

我想我找到了另一个“WTF?”:对于SPI驱动,Peripherals Tool提供了一个回调函数模板:选择一个 Flexcomm 实例并单击“复制到剪贴板”。这就是你会得

2023-03-15 08:15:32

函数模板与类模板的基本概念及实现原理

[导读] 最近使用C++做些编程,把日常遇到的些比较重要的概念总结分享一下。本文来分享一下模板类的原理,以及为什么需要模板类,使用时的基本要点。

2022-03-15 11:21:51

介绍一下IAR的文件模板函数模板

IAR的文件模板是怎样的?IAR的函数注释模板是怎样的?

2022-01-27 07:17:08

函数模板工程的建立及程序下载设置

做一个新建库文件工程及对应模板的记录,以stm32f103rct6为例一.准备工作准备一个单片机对应型号的stm32固件库。二.新建库函数文件夹1.新建文件夹,在文件夹内新建四个子文件夹

资料下载 吴藩 2021-12-27 18:48:01

数模和模数转换的基本原理PPT课件下载

数模和模数转换的基本原理PPT课件下载

资料下载 吕嘉壕 2021-09-14 15:28:32

面向财务的粉色简历模板PPT下载

面向财务的粉色简历模板PPT下载

资料下载 NX逆行 2021-09-13 11:26:14

多点温度采集模块的DS18B20驱动函数模块的设计资料免费下载

本文档的主要内容详细介绍的是多点温度采集模块的DS18B20驱动函数模块的设计资料免费下载。

资料下载 佚名 2019-08-02 17:34:00

Vision控件和函数模板及图像处理步骤的详细资料说明

本文档的主要内容详细介绍的是Vision控件和函数模板及图像处理步骤的详细资料说明。Vision 控件模板 Vision 控件模板位于 Lab

资料下载 Say_Hey 2019-05-29 08:00:00

单片机常用函数模板

单片机常用函数模板以及在KEIL的Templates中添加自己的注释模板 keil通用51单片机32单片机keil添加keil通用switch (){case 0: break;case 1

2022-01-05 07:59:37

如何创建库函数模板

如何创建库函数模板?STM32固件库是什么?

2021-12-01 07:38:40

怎样去创建一种STM32库函数模板

1、新建工程首先需要获取STM32的固件包。固件库包获取以后就正式进入工程模板的创建,在电脑任意位置创建一个文件夹,命名为“库函数模板创建”,然后在其下面新建3 个文件夹,如下:Obj 文件夹:用于

2021-08-24 06:06:52

你们知道什么是函数模板、类模板

[导读] 最近使用C++做些编程,把日常遇到的些比较重要的概念总结分享一下。本文来分享一下模板类的原理,以及为什么需要模板类,使用时的基本要点。 为什么需要模

2021-05-17 15:29:31

C++中为什么需要函数模板、类模板

[导读] 最近使用C++做些编程,把日常遇到的些比较重要的概念总结分享一下。本文来分享一下模板类的原理,以及为什么需要模板类,使用时的基本要点。 为什么需要模

2021-03-12 14:31:16

C++之函数模板的概念及意义

一、函数模板的引出:1、c++中有几种交换变量的方法:(1)定义宏代码块(2)定义函数代码版本一:#include <iostream>#include <string>using namespace

2020-12-24 15:58:55

C++之类模板深入学习的总结

类模板可以定义任意多个不同的类型参数;类模板可以被部分特化和完全特化;特化的本质是模板的分开实现;

2020-12-24 15:46:22

7天热门专题 换一换
相关标签