Отрицатели (Negators)

Отрицатели (Negators)

Отрицатели not1 и not2 берут унарный и бинарный предикаты соответственно и возвращают их дополнения.

template ‹class Predicate›

class unary_negate: public unary_function‹Predicate::argument_type, bool› {

protected:

 Predicate pred;

public:

 unary_negate(const Predicate& x): pred(x) {}

 bool operator()(const argument_type& x) const {return !pred(x);}

};

template ‹class Predicate›

unary_negate‹Predicate› not1(const Predicate& pred) {

 return unary_negate‹Predicate›(pred);

}

template ‹class Predicate›

class binary_negate: public binary_function‹Predicate::first_argument_type, Predicate::second_argument_type, bool› {

protected:

 Predicate pred;

public:

 binary_negate(const Predicate& x): pred(x) {}

 bool operator()(const first_argument_type& x, const second_argument_type& y) const {

  return !pred(x, y);

 }

};

template ‹class Predicate›

binary_negate‹Predicate› not2(const Predicate& pred) {

 return binary_negate‹Predicate›(pred);

}