使用std :: any_of与lambda调用重载的相等运算符

时间:2015-07-06 21:53:21

标签: c++ lambda stl-algorithm

我有以下课程:

Class Foo {
public:
    bool operator ==(const Foo& f);
    ...
private:
    set<pair<int,int>> points;
    ...
}

如果两个Foo对象具有相同的点集,则重载的等于运算符返回true。如果我这样使用它,它会按预期工作:

Foo a = Foo();
Foo b = Foo();
if (a == b) ...

我的问题是,为什么以下编译失败?

vector<Foo> foos = ...
Foo c = ...
if (any_of(foos.begin(),foos.end(),[c](const Foo& f) { return (f == c); }))
{
    // stuff
} 

1 个答案:

答案 0 :(得分:3)

在你的lambda中,fconst。因此,您无法在其上调用operator==,因为operator==不是const。所以解决这个问题:

bool operator==(const Foo& f) const;