将子类对象传递给std :: function参数

时间:2018-11-26 22:39:51

标签: c++ function inheritance stl

我有以下消息类伪代码(第三方,不能更改)。

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::传递任何有效方法。继承将验证方法参数。

0 个答案:

没有答案