簡體   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