[英]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.