Между тем, не очень сложно сделать свой собственный copy_if()
, используя remove_copy_if()
:
#include <functional>
struct my_predicate : std::unary_function<my_arg_type, bool> {
bool operator()(my_arg_type const& x) const { ... }
};
// To perform "copy_if(x, y, z, my_predicate())", write:
remove_copy_if(x, y, z, std::not1(my_predicate()));
Использование not1()
требует, чтобы ваш класс предикатов предоставлял вложенный тип, argument_type
, идентифицирующий тип аргумента - как показано выше, один из удобных способов сделать это - извлечь из unary_function<T, U>
, где T
тип аргумента.