You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中能否实现C++式的模板基类功能?

实现适配Base1/Base2的模板类Derived

首先先把你给出的基础代码摆出来,方便咱们对照理解:

struct Base { /* 这里可以放Base类的成员,比如虚函数、属性等 */ };
struct Base1 : Base { };
struct Base2 : Base { };

void ff(const Base& base) {
    // 处理Base类型对象的业务逻辑
}

接下来要实现的模板类Derived其实非常简洁——它只需要继承模板参数BB(也就是Base1或Base2)就行。如果不需要额外扩展功能,甚至可以是空类;要是需要自定义逻辑,直接在类里加代码就好。

模板类Derived的具体实现

template <typename BB>
struct Derived : public BB {
    // 可选:继承基类的所有构造函数(C++11及以上版本支持)
    using BB::BB;

    // 可选:添加自定义成员函数
    void custom_method() {
        // 这里写你的自定义逻辑
    }
};

怎么用这个模板类?

因为Derived<BB>继承自BB,而BB本身是Base的子类,所以Derived的对象可以隐式转换为const Base&,完美适配ff函数的参数要求。咱们写个实际调用的示例:

int main() {
    // 创建继承自Base1的Derived对象
    Derived<Base1> d1;
    ff(d1); // 正常调用,自动转成const Base&

    // 创建继承自Base2的Derived对象
    Derived<Base2> d2;
    ff(d2); // 同样能顺利传入

    // 调用Derived自己的自定义方法
    d1.custom_method();
    return 0;
}

为啥这能行得通?

说白了,C++模板就是个“代码生成器”——当你用Derived<Base1>时,编译器会自动生成一个继承自Base1的类;用Derived<Base2>时,就生成继承自Base2的类。这两个自动生成的类都间接继承自Base,完全满足ff函数的参数类型要求。

如果你的Base类包含虚函数,Derived对象也能正常支持多态,完全不影响原有逻辑~

内容的提问来源于stack exchange,提问作者Vahagn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:54