Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何识别容器中的std::函数并将其删除?_C++_Std Function - Fatal编程技术网

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将有助于解决方案建议!是的,在许多框架中都是这样做的。我认为,这也应该起作用。