我正在尝试在C++中编写一个观察者模式,因此我有一个包含事件名 -> 回调函数向量的映射表
回调函数存储在一个向量中
std::function<void(void *)>
所以地图看起来像这样
std::unordered_map<std::string, std::vector<std::function<void(void *)>>>
我可以向向量添加监听器并接收和响应事件通知。 我的问题在于实现分离。
所以std :: function无法进行比较,因此擦除/删除是不行的,因此我想搜索向量并手动进行比较。
我发现this question成功使用std :: function :: target来获取对底层指针的访问权限,但我不能使用它,因为我正在使用std :: bind初始化回调函数:
std::function<void(void *)> fnCallback = std::bind(&wdog::onBark, this, std::placeholders::_1)
我只想比较底层成员函数指针,或者将成员函数关联的底层对象指针与之进行比较。有什么方法吗?
我想避免将成员函数指针包装在包含哈希的对象中,尽管看起来我可能不得不这样做...