我试图在一个对象 vector 中找到一个成员变量值为真的对象。是否可以在不定义 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);
}
如上编译不起作用,因为它假定 A* 而不是 A。
这不是使用 lambda 的问题,只是好奇。
最佳答案
你可以使用std::mem_fn
auto iter = std::find_if(v.begin(), v.end(), std::mem_fn(&A::value));
请注意 range library应该直接允许:
auto iter = range::find_if(v, &A::value);
关于c++ - 使用成员变量作为谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697832/