我的谓词函数有什么问题?
What's wrong with my predicate function?
我正在尝试通过 std::list 使用“remove_if”方法。我想删除 "special" 元素。这里有一些代码:
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;
};
我正在尝试通过 std::list 使用“remove_if”方法。我想删除 "special" 元素。这里有一些代码:
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;
};