c++ - 将子类对象传递给 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::
. 继承将验证方法参数。
解决方案
推荐阅读
- python - Python Pandas:使用基于不同列中的分类值的计算创建新列
- c# - 获取存储在 DB 中的 XML 的某些部分 - ASP.NET
- java - 有没有办法在 android studio 项目中找到服务器的端口?
- vue.js - Vue.js 动态组件渲染“无法解析指令”
- regex - 下面两个代表0到100的正则表达式有什么区别?
- javascript - 多维 javascript 数组仅影响 forEach 中的最后一个数组
- react-native-navigation - SideMenu 布局示例 react-native-navigation v2
- c++ - 如何遍历几个小时的 ROOT (.root) 文件并将它们组合成更大的每日数据 .root 文件?
- asp.net - 除了 Owin 之外,还有其他东西可以作为中间件进行身份验证吗?
- python - Pyspark - 加载 ML 模型时出错