我的谓词函数有什么问题?

What's wrong with my predicate function?

本文关键字:问题 什么 谓词 函数 我的      更新时间:2023-10-16

我正在尝试通过std::list使用"remove_if"方法。我想删除"特殊"元素。这里有一些代码:

Class A {
public: 
void foo(size_t id) {
tasks.remove_if(&A::IsEqual(id)); //Here I have an error
}
private:
std::list<Task> tasks;
struct IsEqual {
    IsEqual(const Task& value) : _value(value) {}
    bool operator() (const size_t id) {
        return (_value._id == id);
    }
    Task _value;
    };
};

有人可以解释错误在哪里吗?

您的operator()应该采用Task参数,因为这是tasks中元素的类型。

另一种写法:

tasks.remove_if([id](const Task& t) { return t._id == id });

你有一个错误的函子。构造函数应该取值进行比较,() 运算符应该取 Task:

struct IsEqual {
   IsEqual(const size_t id) : id(id) {}
   bool operator() (const Task& value) {
       return (value._id == id);
   }
   size_t id;
};