
I have the following code:
bool do_something_conditional(int *handle, const boost::function<bool(int)> &pred); bool pred_a(int handle); bool pred_b(int handle, int n1, int n2);
bool do_something(int *handle, int n1, int n2) { return do_something_conditional(handle, boost::bind(std::logical_and<bool>(), boost::not1(&pred_a), boost::bind(&pred_b, _1, n1, n2))); }
But it does not compile.
This should work and is probably clearer:
return do_something_conditional(handle, boost::bind(std::logical_and<bool>(), !boost::bind(&pred_a, _1), boost::bind(&pred_b, _1, n1, n2)));
Yes, it works. Thank you, Ben. But why is my way wrong? With either boost::not1(&pred_a) or !boost::bind(&is_master_device, _1) we get a functor that takes 1 parameter of type int. Max