如何识别容器中的 std::function 并将其删除?
How can I identify an std::function in a container and remove it?
我目前有一个 std::vector
的 std::function
,它表示类似观察者模式的侦听器集合。 std::function
已被选中,因此可以订阅任何类型的侦听器,例如函数指针、lambda 或 class 仿函数。
就是说,我想退订一个监听器,但我意识到 std::function
没有在两个 std::function
对象之间定义 operator==
。
有什么想法吗?代码可以完全改变。
为每个听众使用一个 ID。
using ID = int;
ID listener1 = subject.subscribe([](){/* some code */});
/* some more code */
subject.unsubscribe(listener1);
或者,您可以使用 class 进行订阅,而不是自行退订。它包含 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();
我目前有一个 std::vector
的 std::function
,它表示类似观察者模式的侦听器集合。 std::function
已被选中,因此可以订阅任何类型的侦听器,例如函数指针、lambda 或 class 仿函数。
就是说,我想退订一个监听器,但我意识到 std::function
没有在两个 std::function
对象之间定义 operator==
。
有什么想法吗?代码可以完全改变。
为每个听众使用一个 ID。
using ID = int;
ID listener1 = subject.subscribe([](){/* some code */});
/* some more code */
subject.unsubscribe(listener1);
或者,您可以使用 class 进行订阅,而不是自行退订。它包含 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();