使用姐妹继承

Fab*_*era 7 c++ inheritance multiple-inheritance virtual-inheritance

让我们假设一些无法触及的(遗留)代码声明

struct B{
 public:
  void f(){}
};
Run Code Online (Sandbox Code Playgroud)

让我们假设有

struct A{
 public:
  virtual void f()=0;
};
Run Code Online (Sandbox Code Playgroud)

是否有可能使A子类调用B :: f而不显式调用f(),即代替

  struct C: public A, public B{
   void f(){
   B::f();
  }
 };
Run Code Online (Sandbox Code Playgroud)

有类似的东西

 struct C:virtual public A,virtual public B{

 };
Run Code Online (Sandbox Code Playgroud)

(注意,最后一个类是抽象的,因为没有定义编译器A :: f)

Ton*_*roy 1

直接在 C++ 中,不可能基于 B 的函数与 A 的函数的某些隐式匹配来进行多态分派。您可以使用 gccxml 或其他类似产品进行某种代码生成,但如果只有一百个函数,那么宏无论如何都可以减少对单行代码的转发 - 不值得引入额外的工具,除非您有成千上万的函数这些要做的。