C++之模板类template

2024-01-08 17:32:44

在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;
}

文章来源:https://blog.csdn.net/qq_42244167/article/details/135461544
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。