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