gpt4 book ai didi

C++ 继承问题编辑 : more troubles

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:31 26 4
gpt4 key购买 nike

我有一个基类 MessageHandler 和 2 个派生类,MessageHandler_CB 和 MessageHandler_DQ。

派生类重新定义了 handleMessage(...) 方法。 MH_DQ 处理消息并将结果放入双端队列,而 MH_CB 处理消息然后执行回调函数。

基类有一个静态回调函数,我将它与一个指向库的 this 指针一起传递,该函数在有新消息可供处理时调用静态回调。

当我在静态回调中使用指向 MH_DQ 或 MH_CB 的 void * 时,我的问题就来了。如果我将它转换为基类,则会调用空的 MessageHandler::handleMessage(...) 方法,而不是相应派生类中的版本。

从设计角度解决这种情况的最佳方法是什么和/或哪些语言功能可以帮助我实现问题的解决方案?

提前致谢!

好吧,虚拟方法并没有像魔术一样工作。这个故事有一个转折。我在基类中有一个静态方法和一个纯虚成员函数来处理消息,但我想在将消息路由到派生类之前先调用纯虚基类中的成员函数对消息进行预处理。

所以我有:

class MH {

...

static int CallBackFunction(MessageData *md, void *this_ptr) {
((MH *)this_ptr)->preprocess(md);
return 1;
}

virtual int preprocess(MessageData *md) {
// do some stuff
. . .

handleMessage(md);
return 1;
}

virtual void handleMessage(MessageData *) = 0;

};

class MH_CB : public MH {

...

void handleMessage(MessageData *md) {
// do something
...
}
};

class MH_DQ : public MH {
...

void handleMessage(MessageData *md) {
// do something different
...
}
};

不幸的是,这段代码产生了一个运行时错误,指出正在调用一个纯虚函数。有什么想法吗?

TIA

最佳答案

将原始方法调用虚拟化。

关于C++ 继承问题编辑 : more troubles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952449/

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