首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++ Practical-2 day5 模板之函数模板

  • 25-02-19 07:41
  • 2064
  • 10665
blog.csdn.net

系列文章目录

点击直达——文章总目录


文章目录

  • 系列文章目录
  • C++ Practical-2 day5 模板之函数模板
    • Overview
    • 1.模板之函数模板
      • 1.1.基本语法
      • 1.2.示例
      • 1.3.模板参数
      • 1.4.模板特化
        • 1.4.1.完全特化
        • 1.4.2.偏特化 template partial specialization
      • 1.5.模板的注意事项
    • 关于作者


C++ Practical-2 day5 模板之函数模板

Overview

  • C++不练习coding,就相当于空中楼阁,基础不扎实
  • 光吃不干,等于没吃

1.模板之函数模板

函数模板是C++中一种支持泛型编程的工具,它允许你编写与数据类型无关的函数。通过使用模板,你可以创建一个函数,它可以在编译时自动适应任何给定的数据类型。

1.1.基本语法

template <typename T>
function declaration;
  • 1
  • 2
  • template 是声明模板的关键字。
  • 是一个参数列表,其中 T 是一个占位符,表示任何类型。
  • function declaration 是函数的声明和定义。

1.2.示例

下面是一个简单的函数模板,它交换两个变量的值:

#include 

// 函数模板声明
template <typename T>
void swap(T& a, T& b) {
    T temp = a;
    a = b;
    b = temp;
}

int main() {
    int x = 10;
    int y = 20;
    std::cout << "Before swap: x = " << x << ", y = " << y << std::endl;
    swap(x, y);
    std::cout << "After swap: x = " << x << ", y = " << y << std::endl;

    double a = 5.5;
    double b = 10.5;
    std::cout << "Before swap: a = " << a << ", b = " << b << std::endl;
    swap(a, b);
    std::cout << "After swap: a = " << a << ", b = " << b << std::endl;

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

1.3.模板参数

  • typename:用于模板参数的类型。在C++11之前,也可以使用 class 关键字。
  • T:一个占位符,表示任何类型。

1.4.模板特化

模板特化是为特定类型提供特定实现的方法。这在你需要为某些特定类型提供优化或特殊行为时非常有用。

1.4.1.完全特化
// 普通模板
template <typename T>
void print(T value) {
    std::cout << value << std::endl;
}

// 特化模板
template <>
void print<int>(int value) {
    std::cout << "Integer: " << value << std::endl;
}

int main() {
    print(10);    // 调用特化版本
    print(5.5);   // 调用普通模板
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
1.4.2.偏特化 template partial specialization

偏特化通常用于类模板,但也可以通过模板重载实现函数的偏特化。

// 普通模板
template <typename T1, typename T2>
void print(T1 value1, T2 value2) {
    std::cout << value1 << " and " << value2 << std::endl;
}

// 偏特化
template <typename T>
void print(int value1, T value2) {
    std::cout << "Integer and other type: " << value1 << ", " << value2 << std::endl;
}

int main() {
    print(10, 5.5);   // 调用偏特化
    print(5.5, 10);   // 调用普通模板
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

1.5.模板的注意事项

  1. 编译时多态:模板在编译时进行类型检查和代码生成,这称为编译时多态。
  2. 类型推导:编译器可以根据函数调用的参数类型自动推导出模板参数。
  3. 代码膨胀:每个模板实例都会生成独立的代码,这可能导致二进制文件变大。
  4. 模板元编程:模板不仅可以用于泛型编程,还可以用于模板元编程,这是一种在编译时执行计算的技术。

通过使用函数模板,你可以编写更加通用和灵活的代码。


关于作者

  • 微信公众号:WeSiGJ
  • GitHub:https://github.com/wesigj/cplusplusboys
  • CSDN:https://blog.csdn.net/wesigj
  • 微博:
  • -版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
WeSiGJ
微信公众号
共同分享,共同交流, 共同学习!
注:本文转载自blog.csdn.net的WeSiGJ的文章"https://blog.csdn.net/wesigj/article/details/142603401"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top