使用成员变量作为谓词

tho*_*san 3 c++

我试图在一个对象的向量中找到一个对象,其中一个成员变量的值为true.可以在没有定义lamba函数或函数对象的情况下完成,只需指定成员变量本身:

class A
{
public:

   explicit A(bool v, int v2, float v3) : value(v), value2(v2), value3(v3)
   {}
   ...
   bool value;
   int value2;
   float value2;
   ...
}

int main()
{
    std::vector<A> v;
    v.push_back(A(false, 1, 1.0));
    v.push_back(A(true, 2, 2.0));
    v.push_back(A(false, 3, 3.0));

    auto iter = std::find_if(v.begin(), v.end(), &A::value);
}
Run Code Online (Sandbox Code Playgroud)

如上所述编译不起作用,因为它假设A*而不是A.

使用lambdas并不是一个问题,只是好奇.

Jar*_*d42 7

你可以用 std::mem_fn

auto iter = std::find_if(v.begin(), v.end(), std::mem_fn(&A::value));
Run Code Online (Sandbox Code Playgroud)

演示

请注意,范围库应该直接允许:

auto iter = range::find_if(v, &A::value);
Run Code Online (Sandbox Code Playgroud)