C++ 如何识别容器中的std::函数并将其删除?
我目前有一个C++ 如何识别容器中的std::函数并将其删除?,c++,std-function,C++,Std Function,我目前有一个std::vector的std::function,它以类似观察者的模式表示侦听器的集合标准::函数,以便可以订阅任何类型的侦听器,例如函数指针、lambda或类functor 也就是说,我想取消订阅侦听器,但我意识到std::function并没有在两个std::function对象之间定义operator== 有什么想法吗?代码可以完全更改。为每个侦听器使用一个ID using ID = int; ID listener1 = subject.subscribe([](){/*
std::vector
的std::function
,它以类似观察者的模式表示侦听器的集合<已选择代码>标准::函数,以便可以订阅任何类型的侦听器,例如函数指针、lambda或类functor
也就是说,我想取消订阅侦听器,但我意识到std::function
并没有在两个std::function
对象之间定义operator==
有什么想法吗?代码可以完全更改。为每个侦听器使用一个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();
为每个侦听器使用一个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();
为每个侦听器使用一个ID。@ThomasSablik并将ID返回给订阅者,以便订阅者可以在需要时删除自己?我发现您的问题已明确说明,但我认为添加MCVE将有助于解决方案建议!是的,在许多框架中都是这样做的。我认为,这也应该起作用。为每个侦听器使用一个ID。@ThomasSablik并将ID返回给订阅者,以便订阅者可以在需要时删除自己?我发现您的问题已明确说明,但我认为添加MCVE将有助于解决方案建议!是的,在许多框架中都是这样做的。我认为,这也应该起作用。