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
相关产品推荐
相关产品推荐

