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