如何识别容器中的std :: function并将其删除?

问题描述 投票:0回答:1

我目前有一个std::vectorstd::function,代表一个类似观察者模式的听众集合。选择std::function以便可以订阅任何类型的侦听器,例如函数指针,lambdas或类函子。

也就是说,我想取消订阅听众,但我意识到std::function没有在两个operator==对象之间定义std::function

任何的想法?代码可以完全改变。

c++ std-function
1个回答
4
投票

为每个侦听器使用ID。

using ID = int;

ID listener1 = subject.subscribe([](){/* some code */});

/* some more code */

subject.unsubscribe(listener1);

或者,您可以使用类订阅而不是取消订阅。它包含ID和主题。

class Subscription {
    ID id;
    Subject subject;

public:
    Subscription(ID id, Subject subject) : id(id), subject(subject) {}
    void unsubscribe() {
        subject.unsubscribe(id);
    }
};

Subscription listener1 = subject.subscribe([](){/* some code */});

/* some more code */

listener1.unsubscribe();
© www.soinside.com 2019 - 2024. All rights reserved.