使用boost::lambda或boost::phoenix与std::find_if
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; });
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 是否可以覆盖 "find" 和 "erase" boost::bimaps::bimap.left 的方法?怎么办?
- 如何处理"Cmake Error: Unable to find the requested Boost libraries"?
- CMake linking Boost: cannot find -lboost_program_options
- 使用 Boost 'ptree.find' 无法按预期工作
- 在Boost Graph中使用find()在Boost关联属性图中使用Find()错误
- 使用 CMake 时出现"Could not find boost libraries"错误
- Boost can not find lib
- Boost bcp : cannot find bcp
- boost::unordered_map()的find()方法存在问题
- 对std::string::find使用boost::bind无法编译
- 避免使用临时std::string来调用boost::unordereded_map::find
- find() problems with boost bimap
- Boost.test cannot find main
- boost::multi_index and std::map find() and erase()
- Boost managed_windows_shared_memory find() crash
- Boost::string_ref find algorithms
- 为什么我不能使用 std::find 当容器中的基本元素是 boost::tuple 时