首页 > 编程语言 >C++template模板

C++template模板

时间:2025-01-21 12:04:14浏览次数:3  
标签:index template 示例 int C++ 参数 Template 模板

目录

函数模板(Function Template)

示例:

类模板(Class Template)

示例:

模板参数(Template Parameters)

非类型模板参数示例:

模板特化(Template Specialization)

示例:


C++ 中的模板(Template)是一种强大的特性,允许程序员编写与类型无关的代码。模板可以用于函数和类,使得代码更加通用和可重用。以下是关于 C++ 模板的一些基本信息和示例:

函数模板(Function Template)

函数模板允许你编写一个可以与任何数据类型一起工作的函数。定义函数模板时,你使用模板参数来代表未知的类型。当编译器遇到对模板函数的调用时,它会根据传递的参数类型生成一个相应类型的函数实例。

示例:
#include <iostream>
using namespace std;

// 定义一个函数模板
template <typename T>
T add(T a, T b) {
    return a + b;
}

int main() {
    cout << add(3, 4) << endl;        // 调用模板函数,类型为 int
    cout << add(2.5, 1.5) << endl;    // 调用模板函数,类型为 double
    cout << add(string("Hello, "), string("world!")) << endl; // 调用模板函数,类型为 string
    return 0;
}

类模板(Class Template)

类模板允许你定义一个可以与任何数据类型一起工作的类。与函数模板类似,类模板也使用模板参数来代表未知的类型。

示例:
#include <iostream>
using namespace std;

// 定义一个类模板
template <typename T>
class Box {
private:
    T data;
public:
    Box(T d) : data(d) {} // 构造函数
    T getData() { return data; } // 成员函数
};

int main() {
    Box<int> intBox(123);          // 创建一个类型为 int 的 Box 对象
    Box<string> strBox("Hello");   // 创建一个类型为 string 的 Box 对象

    cout << intBox.getData() << endl;       // 输出 123
    cout << strBox.getData() << endl;       // 输出 Hello

    return 0;
}

模板参数(Template Parameters)

模板参数可以是类型参数(如上例中的 T),也可以是非类型参数(如整数、指针等)。非类型模板参数在模板定义时提供具体的值,并且这些值在模板实例化时是不可变的。

非类型模板参数示例:
#include <iostream>
using namespace std;

template <typename T, int N>
class Array {
private:
    T arr[N];
public:
    void set(int index, T value) {
        if(index >= 0 && index < N) {
            arr[index] = value;
        }
    }
    T get(int index) {
        if(index >= 0 && index < N) {
            return arr[index];
        } else {
            return T(); // 返回一个默认构造的 T 类型对象
        }
    }
};

int main() {
    Array<int, 5> intArray; // 创建一个包含 5 个 int 的 Array 对象
    intArray.set(0, 10);
    intArray.set(1, 20);
    cout << intArray.get(0) << endl; // 输出 10
    cout << intArray.get(1) << endl; // 输出 20

    return 0;
}

 

模板特化(Template Specialization)

有时你可能需要对某些特定类型提供特殊实现,这时可以使用模板特化。模板特化允许你为特定的模板参数提供不同的实现。

示例:
#include <iostream>
using namespace std;

// 通用模板
template <typename T>
void print(T t) {
    cout << "Generic template: " << t << endl;
}

// 对 int 类型的特化
template <>
void print<int>(int i) {
    cout << "Specialized template for int: " << i << endl;
}

int main() {
    print(42);        // 调用特化版本
    print(3.14);      // 调用通用版本
    print("hello");   // 调用通用版本

    return 0;
}

C++ 模板提供了极大的灵活性和代码重用性,但也可能带来编译时间的增加和错误消息的复杂性。因此,在使用模板时,需要权衡其带来的好处和潜在的问题。

标签:index,template,示例,int,C++,参数,Template,模板
From: https://blog.csdn.net/Yinrtyu_/article/details/145249515

相关文章

  • 如何高效且安全地进行网站页面模板的修改?
    在现代网站建设中,页面模板的修改是提升用户体验、优化SEO排名以及保持网站美观度的重要手段。以下是详细的步骤:备份现有模板:在开始任何修改之前,请确保已经对当前使用的模板进行了完整备份。这可以防止意外错误导致的数据丢失。选择合适的编辑工具:根据所用的内容管理系统(CMS),如Wo......
  • 掌握这些技巧,让你轻松应对网站模板修改中的常见挑战
    注意事项解释遵循最佳实践始终按照官方文档推荐的方式来进行修改,避免直接编辑核心文件,以减少升级时出现问题的风险。考虑SEO影响模板中的元标签、标题标签等元素直接影响搜索引擎抓取效率,因此在修改时要格外小心,确保不会破坏原有SEO设置。维护一致性整个网站应......
  • 洛谷 P3397:地毯 ← “二维前缀和 + 二维差分”模板题
    【题目来源】https://www.luogu.com.cn/problem/P3397【题目描述】在n×n的格子上有m个地毯。给出这些地毯的信息,问每个点被多少个地毯覆盖。【输入格式】第一行,两个正整数n,m。意义如题所述。接下来m行,每行两个坐标(x1,y1)和(x2,y2),代表一块地毯,左上角......
  • RestTemplate
    设置请求头、请求体1、POST、PUT请求设置请求头、请求体@PostMapping("post_with_body_and_header")publicvoidpostWithBodyAndHeader(@RequestBody(required=false)UserEntityrequestBody){//1.请求头HttpHeadershttpHeaders=newHttpHe......
  • 【C++提高篇】—— C++泛型编程之模板基本语法和使用的详解
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、模板的概念二、函数模板2.1函数模板的使用2.2函数模板注意事项2.3普通函数与函数模板的区别2.4普通函数与函数模板的调用规则2.5模板的局限性三、类模板3.1类模板的使用3.2类模板......
  • (2024最新毕设合集)基于SpringBoot的游乐园管理系统-69394|可做计算机毕业设计JAVA、PHP
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......
  • C++ 模板(函数模板与类模板)
    原文链接:https://www.cnblogs.com/1873cy/p/18398002模板模板介绍#C++提供了函数模板(functiontemplate)。所谓函数模板。实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡事函数体相同的函数都可以使用这个模板......
  • 如何修改网站模板结构:详细指南
    修改网站模板结构是提升网站设计和用户体验的重要步骤。以下是详细的修改步骤和注意事项,适用于各种类型的网站管理系统:备份网站文件:在进行任何文件修改之前,务必备份网站的所有文件和数据库。您可以使用FTP工具下载网站文件,或者通过网站托管商提供的备份功能进行备份。确保备......
  • 如何修改网站模板:详细教程
    修改网站模板是提升网站设计和用户体验的重要步骤。以下是详细的修改步骤和注意事项,适用于各种类型的网站管理系统:备份网站文件:在进行任何文件修改之前,务必备份网站的所有文件和数据库。您可以使用FTP工具下载网站文件,或者通过网站托管商提供的备份功能进行备份。确保备份文......
  • 百度网站模板修改的步骤与注意事项
    如果您需要修改百度网站的模板,确保网站的外观和功能符合预期,可以遵循以下步骤和注意事项:备份现有模板:在进行任何更改之前,请确保对当前使用的模板进行完整备份。这可以防止意外错误导致网站无法正常运行。获取访问权限:确保您有足够的权限来编辑模板文件。如果您不是管理员,则需要......