C++类型擦除

在C++中,类型擦除是一种将具体类型的信息擦除以实现泛型编程的技术。它允许我们在不知道或不关心具体类型的情况下操作数据。

一种常见的类型擦除技术是使用模板和虚函数来实现。以下是一个简单的示例:

#include <iostream>
#include <memory>

// 定义一个类型擦除基类
class Any {
public:
    virtual ~Any() {}
    virtual std::shared_ptr<Any> clone() const = 0;
    virtual void print() const = 0;
};

// 具体类型擦除类
template<typename T>
class AnyValue : public Any {
private:
    T value;

public:
    explicit AnyValue(const T& value) : value(value) {}

    // 克隆函数
    std::shared_ptr<Any> clone() const override {
        return std::make_shared<AnyValue<T>>(value);
    }

    // 打印函数
    void print() const override {
        std::cout << value << std::endl;
    }
};

int main() {
    // 创建两个不同类型的 Any 对象
    std::shared_ptr<Any> a1 = std::make_shared<AnyValue<int>>(42);
    std::shared_ptr<Any> a2 = std::make_shared<AnyValue<std::string>>("Hello, world!");

    // 调用打印函数,无需关心具体类型
    a1->print();  // 输出: 42
    a2->print();  // 输出: Hello, world!

    return 0;
}

在上述示例中,我们定义了一个类型擦除的基类 Any,它包含了两个纯虚函数 clone() 和 print()。然后,我们使用模板类 AnyValue 来实现具体类型的擦除。这个模板类继承自基类 Any,并重写了基类的虚函数。

在 main() 函数中,我们创建了两个不同类型的 Any 对象,并调用它们的 print() 函数,无需关心具体类型。这样我们就可以在运行时处理不同类型的数据,实现了泛型编程的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值