
On 3/6/08, Jean-Pierre Bergamin <james@ractive.ch> wrote:
Hello
I couldn't figure out how to use a logical negation in the following situation.
struct IsConditionValid : public unary_function<Event, bool> { public: bool operator() (const Event& event)const {} };
remove_copy_if(events.begin(), events.end(), back_inserter(result), IsConditionValid()); <-- how to negate the condition object?
What I really need is '! IsConditionValid()'.
How can it be done using may be boost::bind ?
If you already have a unary predicate (as your IsConditionValid functor), you can also use the std::not1 function to negate the predicate:
remove_copy_if( events.begin(), events.end(), back_inserter(result), not1(IsConditionValid()) );
Bind overloads the ! operator for your convenience
#include <boost/bind.hpp> ...
remove_copy_if( events.begin(), events.end(), back_inserter(result), !boost::bind(IsConditionValid(), _1) );
Thanks Jean-Pierre. That did the trick.