gpt4 book ai didi

c++ - 以 std::function 作为值的多重映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:57:51 24 4
gpt4 key购买 nike

我有一个 std::multimap,其中的值是 std::function 类型。由于 std::function 没有比较 - 请参阅 this - 似乎无法从此 multimap 中删除特定元素。我想如果你想,例如,按值从例如中删除一个元素,情况也是如此。 std::liststd::vector

我的用例是一个接受回调参数的函数 (std::function)。回调应该在特定事件发生时被调用。但是,在其他情况下,被调用方可能希望在触发回调之前“注销”回调。

尽管最初,我只是将 std::function 包装在一个结构中,并在我的映射中插入指向该结构的指针。然而,这并没有被证明是可行的,因为接口(interface)用户不必将回调包装在结构中并存储指针值。

我目前最好的想法是在注册回调时返回一个 id - 如果被调用者希望以后可以选择取消回调,则必须存储该 id。

对我的泡菜有什么想法吗?

最佳答案

如果调用者应该保留某种 token (在您的情况下为 id),为什么不包装 std::functionstd::shared_ptr让来电者提供/保留它而不是一些虚构的 ID? std::multimap然后将存储 std::shared_ptr<std::function<...>>直接作为它的值而不是 std::function .

这样,您以后可以轻松删除它,并且不会复制 std::function本身,这也可能是一个 potentially costly operation .当来电者使用 std::make_shared<std::function<...>>(...)它可能是一个真正的替代恕我直言。

关于c++ - 以 std::function 作为值的多重映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com