首页 > 解决方案 > 将子类对象传递给 std::function 参数

问题描述

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

消息.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";
};

在我的应用程序代码中,我试图编写一个函数来注册一个外部函数来处理任何消息:

应用程序.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 函数。例如:

主.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::. 继承将验证方法参数。

标签: c++functioninheritancestl

解决方案


推荐阅读