繁体   English   中英

使用带有std :: find_if的boost :: lambda或boost :: phoenix

[英]using boost::lambda or boost::phoenix with std::find_if

我有这样的课

class Foo {
    public:
        int GetID() const { return m_id; }
    private:
        int m_id;
};

我想在充满Foo对象的向量上使用find_if,如下所示:

std::find_if(foos.begin(), foos.end(), ???.GetID() == 42);

我不太明白我必须写些什么而不是???。 我知道存在带有boost :: lambda的_1或带有boost :: phoenix的arg1,但是在那之后我很茫然。

编辑:

我尝试了以下无效的方法,即使在很多示例中我都这样认为。

std::find_if(foos.begin(), foos.end(), boost::lambda::bind(&Foo::GetID, boost::lambda::_1) == 42);

然后我得到以下错误:

错误C2678:二进制'==':未找到采用'const boost :: lambda :: lambda_functor'类型的左操作数的运算符(或没有可接受的转换)

在这种情况下,使用boost::bind ,这实际上是C ++ 11之前最简单的方法。

std::find_if(foos.begin(), foos.end(), boost::bind(&Foo::GetId, _1) == 42);

如果您应该使用phoenix ,则可以使用phoenix::bind

std::find_if(foos.begin(), foos.end(),
phx::bind(&Foo::GetId, phx::placeholders::_1) == 42);

phx在哪里

namespace phx = boost::phoenix;

如果可以使用C ++ 11-可以使用std::bind或lambda函数

std::find_if(foos.begin(), foos.end(), 
[](const Foo& f) { return f.GetId() == 42; });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM