我有以下消息类伪代码(第三方,不能更改)。
messages.h :
class AbstractMessage {
// pure virtual
};
class MessageA : public AbstractMessage {
// implements everything
const static std::string messageName = "MessageA";
};
class MessageB : public AbstractMessage {
// implements everything
const static std::string messageName = "MessageB";
};
在我的应用程序代码中,我试图编写一个函数来注册用于处理任何消息的外部函数:
application.cpp :
bool register_handler(std::string messageType, std::function<void(AbstractMessage&)>messageHandler) {
// add the string and function to a map to be called
}
但是,我需要能够传递MessageA或MessageB函数。例如:
main.cpp :
void processMessageA(MessageA &msg) {
// do something
}
Application myApp;
当我尝试执行以下操作时,这将成为问题:
std::function<void(MessageA&)> f(processMessageA);
myApp.register_handler("MessageA", f);
MessageA通过继承应该是有效的AbstractMessage,但是出现以下错误:
'Error C2664: 'bool Application::register_handler(std::string,const std::function<void (AbstractMessage &)> &)': cannot convert argument 2 from 'std::function<void(MessageA &)>' to 'const std::function<void (AbstractMessage &)> &
这在C ++中可行吗?在Java中,我将使用功能接口,并通过this::
传递任何有效方法。继承将验证方法参数。