c++ - 使用成员变量作为谓词

标签 c++

我试图在一个对象 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));

Demo

请注意 range library应该直接允许:

auto iter = range::find_if(v, &A::value);

关于c++ - 使用成员变量作为谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697832/

相关文章:

c++ - 处理作用域变量的内部函数

c++ - 需要帮助将 Graphics32 Delphi 示例转换为 C++

c++ - 如何检查字符串是否只有字母

c++ - 比较两个节点坐标的最佳方法是什么?

C++ 流日志 Objective-C 对象

c++ - 运行时访问图书管理员类?

Java CryptUnprotectData Windows WiFi 密码

C++ 从 cin 中删除空行并保存到同一个文件

c++ - 模拟静态函数成员

c++ - 通过C++/Qt生成word文档(.doc/.odt)