C++之模板类template

在C++中,模板类是一种允许你编写通用类以处理各种数据类型的机制。通过使用模板类,你可以编写一次代码,然后使用不同的数据类型进行实例化,而无需为每种数据类型都编写一个新类。这有助于实现代码的重用和泛化。

一个实例:

#include <iostream>

// 定义一个模板类
template <typename T>
class MyTemplateClass {
   
private:
    T data;

public:
    // 构造函数
    MyTemplateClass(T value) : data(value) {
   }

    // 成员函数
    void display() {
   
        std::cout << "Data: " << data << std::endl;
    }
};

int main() {
   
    // 使用模板类实例化不同类型的对象
    MyTemplateClass<int> intObj(42);
    MyTemplateClass<double> doubleObj(3.14);
    MyTemplateClass<std::string> stringObj("Hello, Templates!");

    // 调用成员函数
    intObj.display();
    doubleObj.display();
    stringObj.display();

    return 0;
}

另一个实例:

#include <iostream>
#include <string>

// 定义一个模板类 YourClass,有一个纯虚函数 merge 接受可变数量的模板参数 T
template<typename... T>
class YourClass {
   
public:
    virtual void merge(T... args) = 0;
};

// 定义一个模板类 ConcreteClass,继承自 YourClass,使用相同的模板参数 T
template<typename... T>
class ConcreteClass : public YourClass<T...> {
   
public:
    // 实现 YourClass 中的虚函数 merge
    void merge(T... args) override {
   
        std::cout << "Merging values: ";
        // 调用私有成员函数 printValues 处理参数包中的每个值
        printValues(args...);
        std::cout << std::endl;
    }

private:
    // 递归地打印参数包中的每个值
    template<typename U, typename... Rest>
    void printValues(U first, Rest... rest) {
   
        std::cout << first << " ";
        // 递归调用 printValues 处理剩余的参数
        printValues(rest...);
    }

    // 基本情况:参数包为空时终止递归
    void printValues() {
   
        // 递归的终止条件,什么都不做
    }
};

int main() {
   
    // 创建一个 ConcreteClass 的实例,模板参数为 int, double, std::string
    ConcreteClass<int, double, std::string> instance;
    
    // 调用 ConcreteClass 实例的 merge 函数,传递整数、浮点数和字符串作为参数
    instance.merge(42, 3.14, "Hello");

    return 0;
}

相关推荐

  1. C++模板template

    2024-01-10 00:54:03       45 阅读
  2. C++ templates: (2)、变参模板

    2024-01-10 00:54:03       36 阅读
  3. C++ 入门第12:模板Template

    2024-01-10 00:54:03       27 阅读
  4. C++学习笔记(三十一):c++ 模板template

    2024-01-10 00:54:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-10 00:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-10 00:54:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-10 00:54:03       82 阅读
  4. Python语言-面向对象

    2024-01-10 00:54:03       91 阅读

热门阅读

  1. 2024年湖北建设厅建筑七大员怎么报考?

    2024-01-10 00:54:03       56 阅读
  2. Linux 编辑器和文本处理

    2024-01-10 00:54:03       49 阅读
  3. 面试题总结(1.8)

    2024-01-10 00:54:03       42 阅读
  4. C#,C++实现:华为经典笔试题_菜单组合种类题目

    2024-01-10 00:54:03       48 阅读
  5. arch modelsim 解决无法运行

    2024-01-10 00:54:03       55 阅读
  6. 算法学习:动态规划之爬楼梯问题

    2024-01-10 00:54:03       60 阅读
  7. 学习Go语言Web框架Gee总结--中间件Middleware(五)

    2024-01-10 00:54:03       73 阅读
  8. 深入PostgreSQL:高级函数用法探索

    2024-01-10 00:54:03       62 阅读
  9. 【代码学习】einops,更简单的张量变化

    2024-01-10 00:54:03       54 阅读