【发布时间】:2015-09-03 12:39:45
【问题描述】:
我有这样的课
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”类型的左侧操作数的运算符(或没有可接受的转换)
【问题讨论】:
-
既然可以使用 c++11 标准,为什么还要自己做呢?
-
@David Haim:我希望我可以;)
-
std::find_if(foos.begin(), foos.end(), (&boost::phoenix::placeholders::_1->*&Foo::GetID)() == 42); -
@Piotr Skotnicki:这给了我错误:无法从 'const boost::phoenix::actor
*' 转换为 'const Foo *'
标签: c++ boost boost-phoenix boost-lambda