• 正文
    • 1 函数模板
    • 2 实例
    • 3 总结
  • 相关推荐
申请入驻 产业图谱

C++函数模板基础

05/09 14:40
438
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1 函数模板

1.1 基础介绍

函数模板是一种特殊的函数定义,它允许你创建通用的函数,这些函数可以处理多种不同的数据类型,而不需要为每种数据类型都编写一个单独的函数。

在 C++ 里,函数模板的格式包含模板声明函数定义两部分,其基本格式如下:

template <typename T>
返回类型 函数名(参数列表) 
{
    // 函数体
}

template 关键字:用来声明模板的起始标志

<typename T>:模板参数列表,定义了模板中使用的类型参数typename 是指定类型参数的关键字,也可以用 class 来替代,二者在功能上没有区别。T 是类型参数的名称,可以根据需要自定义,通常用 T 来表示 “类型(Type)”

返回类型:函数的返回值类型,可以是具体类型,也能是模板参数类型函数名:即函数的名称,遵循 C++ 标识符的命名规则即可参数列表:函数的参数列表,参数类型可以是具体类型,也可以是模板参数类型函数体:包含函数的具体实现代码

1.2 函数模板与模板函数

1.2.1 函数模板

函数模板的重点是模板。函数模板是一个抽象的定义,是创建通用函数的工具。

1.2.2 模板函数

模板函数则是函数模板实例化后的具体函数,用于处理特定类型的数据。

2 实例

由上面的函数模板的介绍,类型参数T可以在参数中使用,也可以在返回值中使用。

2.1 在参数和返回值中使用T

此函数模板 CalcMin 接收两个相同类型的参数 num1 和 num2,最终返回较小的那个值。

// 在参数和返回值中使用T
template <typename T>
T CalcMin(T num1, T num2)
{
    return num1 < num2 ? num1 : num2;
}

代码优势

通用性:借助模板参数 T,该函数可以处理任意支持小于运算符 < 的数据类型,像 intdoublefloat 等,提高了代码的复用性。

简洁性:代码结构简单,逻辑清晰,易于理解和维护。

2.2 在返回值中使用T

// 在返回值中使用T
template <typename T>
T GetValue()
{
    return T(5.68);
}

这个函数模板 GetValue 不接收任何参数,它的主要功能是返回一个由 T 类型构造的对象,该对象是通过将 5.68 进行类型转换得到的。

2.3 在参数中使用T

这是一个带有两个类型参数 T1 和 T2 的函数模板 SetValue。该函数接收两个不同类型的参数 para1 和 para2,并将它们的值输出到标准输出流,展示参数的具体内容。

// 在参数中使用T
template <typename T1, typename T2>
void SetValue(T1 para1, T2 para2)
{
    std::cout << "para1:" << para1 << ", " << "para2:" << para2 << std::endl;
}

代码优点

高度泛用性:借助模板参数 T1 和 T2,函数可以处理任意两种不同类型的参数组合,只要这些类型支持 << 运算符用于输出到 std::cout。这极大地增强了代码的复用性,避免了为不同类型组合编写多个类似函数的麻烦。

灵活性:调用者可以自由地传入不同类型的参数,函数会根据实际传入的类型进行实例化。

2.4 完整示例代码

// g++ test1.cpp -std=c++11 -o test1
#include <stdio.h>
#include <iostream>

// 在参数和返回值中使用T
template <typename T>
T CalcMin(T num1, T num2)
{
    return num1 < num2 ? num1 : num2;
}

// 在返回值中使用T
template <typename T>
T GetValue()
{
    return T(5.68);
}

// 在参数中使用T
template <typename T1, typename T2>
void SetValue(T1 para1, T2 para2)
{
    std::cout << "para1:" << para1 << ", " << "para2:" << para2 << std::endl;
}

int main()
{
    int n1 = 5;
    int n2 = 8;
    float f1 = 6.6;
    float f2 = 9.6;
    printf("min(%d,%d)=%dn", n1, n2, CalcMin(n1, n2));
    printf("min(%.2f,%.2f)=%.2fn", f1, f2, CalcMin(f1, f2));
    
    printf("get int %d(%.2f)n", GetValue<int>(), (float)(GetValue<int>()));
    printf("get float %.2fn", GetValue<float>());
    
    SetValue("6.89576", "abcdefg");
    
    return0;
}

运行效果如下

3 总结

本篇介绍了C++中的函数模板,并通过一些示例来演示函数模板的使用。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录