c++ - 在 C++ 中覆盖函数时如何选择基类?

标签 c++ overriding multiple-inheritance

我有两个基类和一个继承这两个基类的类。 两个基类都有一个具有相同签名的虚函数,我想在派生类中为每个虚函数提供不同的实现。

class A{
    virtual void f() = 0;
}
class B{
    virtual void f() = 0;
}
class Derived:public A, public B{
    void A::f() override{ // Error
        ...
    }
    void B::f() override{ // Error
        ...
    }
}

正确的做法是什么? (我无法重命名虚函数。实际上这两个基类是从同一个模板类生成的。)

最佳答案

template <typename T>
class AShim : public A {
  void f() override {
    static_cast<T*>(this)->A_f();
  }
};

template <typename T>
class BShim : public B {
  void f() override {
    static_cast<T*>(this)->B_f();
  }
};

class Derived: public AShim<Derived>, public BShim<Derived> {
  void A_f();
  void B_f();
};

关于c++ - 在 C++ 中覆盖函数时如何选择基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45228261/

相关文章:

c++ - 虚函数和 std::function?

qt - 如何覆盖 Q_Property?

c++ - 标记为 `virtual final` 的基类方法是否会引入额外的开销?

java - java中多重继承中的接口(interface),建模问题

c++ - VS 2012 : Debugger: "Break all in 5 seconds"

c++ - 将一对插入到 map 中并增加计数?

python - 在自定义 Python 类中覆盖默认方法的简单方法?

java - Object类怎么可能是子类的父类(super class)呢?

python - 如何在多重继承中使用命名元组

c++ - 以下结构定义是什么意思?