我有一个这样的课程
<div class="box">
<span class="red box">
<a class="elem" />
</span>
</div>
$(document).ready(function () {
var nodeName = $('.elem').closest('.box').prop('nodeName');
});
我想在充满Foo对象的向量上使用find_if,如下所示:
class Foo {
public:
int GetID() const { return m_id; }
private:
int m_id;
};
我不太清楚我要写的东西而不是???。我知道有一个_1与boost :: lambda或arg1与boost :: phoenix,但在那之后我不知所措。
修改
我尝试了以下无法使用的功能,即使我在很多示例中都看到过这样的功能。
std::find_if(foos.begin(), foos.end(), ???.GetID() == 42);
然后我收到以下错误:
错误C2678:二进制'==':找不到哪个运算符带有'const boost :: lambda :: lambda_functor'类型的左手操作数(或者没有可接受的转换)
答案 0 :(得分:4)
在这种情况下使用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; });