class A {
void methodToCall() {};
}
class B {
B() {
subscribeToEvent();
}
void eventHandler(Event* E) {
call A::methodToCall()
}
}
class C : public A, public B{
}
这似乎是一种罕见的情况,所以让我解释一下我正在尝试做什么。
我有很多像A类的类。这些类是由另一个框架生成的,因此我无法控制它们的生成方式。
对于每个A类我都有一个或多个继承A类的 C 类。
我调用了eventHandler()时需要调用A :: MethodToCall()。我的目标不是必须在我的所有类中订阅并提供eventhadler方法,如C类。
我更愿意创建一个B类,我所有的C类都可以继承。
我的问题是我不知道如何从B级打电话给A班。
如果有更好的方法,我愿意接受它。
答案 0 :(得分:1)
您的代码与您的描述不符(代码B不会从A继承,而在您的描述中也是如此),但我认为您所说的是"我有一个像A这样的大量类,以及从A类(在你的例子中是C)中继承的大量类,以及那些子类中常见的东西我想要分解(进入B在你的例子中),但它包含的东西取决于特定的A(在你的例子中称为A方法)并且它击败了整个点,必须制作许多B(每个A一个)几乎都是相似的"
您可以使用的一件事是继承自参数'的模板类。将大量B变体定义为单个模板类的技巧:
template<class A> B : public A {
void eventHandler(Event* E) {
call methodToCall();
}
}
class C1 : public B<A1> {
... whatever
class C2 : public B<A2> { ...
如果你有某些A类在B中需要稍微不同的东西,你也可以为这些类专门化B模板。
答案 1 :(得分:0)
你可以编写一个包装类,它是A和B的子类。子类,称之为D,然后知道A和B,所以当事件发生时,D负责处理它并调用A.然后你可以让你的C类继承D类。
编辑:我想我在这里误解了你的问题。如果B继承A,则B可以直接调用A中的函数(只要A的方法不是私有的。如果是,则无论如何都无法调用它。)答案 2 :(得分:0)
此代码
class A {
void methodToCall() {};
}
应该是
class A {
static void methodToCall() {};
}
为此起作用:
void eventHandler(Event* E) {
A::methodToCall()
}
因为你没有A
类型的对象,而'B'对A
一无所知 - 所以只有静态方法可用。
或者这样做
class B : public A ....
class C: public B
然后不需要静态,因为B继承A。
选择权在你手中。