gpt4 book ai didi

c++ - 多重继承层次

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:38 25 4
gpt4 key购买 nike

很长一段时间以来,我一直在寻找一种干净的方法来做到这一点。在我的问题中,存在 3 个不共享任何父类的类,但每个类都有一些同名的方法(A.doSomething、B.doSomething、C.doSomething)。因此,具有相同的函数签名、继承自 A 并使用方法 doSomething() 的类 D 与继承自 B 或 C 的 E “看起来相同”。

这是我希望能够做的事情的草图:

class Base {
public:
void myMethod(void) { doSomething(); }
};

class Independent {
public:
doSomething();
};

clase Derived : public Base : public Independent {
(...)
};

int main(void) {
Derived *derivedObject = new Derived();
derivedObject->myMethod();
}

在这个问题中,“Independent”类型的对象由我无法更改的库提供。我想定义一个基类,它使用稍后将要继承的方法。我找不到使用虚拟继承执行此操作而不会导致歧义编译的正确方法。

最佳答案

你那里的情况很糟糕。一种解决方案是使用 Curiously Recurring Template Pattern 在编译时执行继承,如下所示:

template <typename D>
class Base {
public:
void myMethod(void) { static_cast<D*>(this)->doSomething(); }
};

class Independent {
public:
void doSomething();
};

clase Derived : public Base : public Independent {
/*...*/
};

int main(void) {
Derived *derivedObject = new Derived();
derivedObject->myMethod();
}

或者,您可以选择在它们之间放置一个中间人类以转发到 Independent(我假设您有许多类派生自相同的 BaseIndependent ,只是不想为每个类(class)都这样做)。

template <typename D>
class Base {
private:
virtual void doSomethingImpl();
public:
void myMethod(void) { doSomethingImpl(); }
};

class Independent {
public:
void doSomething();
};

class IndependentWrapper : public Base : public Independent {
private:
void doSomethingImpl() { Independent::doSomething(); }
};

clase Derived : public IndependentWrapper {
/*...*/
};

int main(void) {
Derived *derivedObject = new Derived();
derivedObject->myMethod();
}

关于c++ - 多重继承层次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com