Я не знаю ни одного функционального объекта в стандартной библиотеке C ++ или в Boost, который бы это делал (это не значит, что его нет; я не знаком с all в библиотеках Boost:-P).
Однако написать свой текст довольно просто.Рассмотрим следующее:
template <typename Predicate>
class indirect_binary_predicate
{
public:
indirect_binary_predicate(const Predicate& pred = Predicate())
: pred_(pred)
{
}
template <typename Argument0, typename Argument1>
bool operator()(Argument0 arg0, Argument1 arg1) const
{
return pred_(*arg0, *arg1);
}
private:
Predicate pred_;
};
Пример использования:
std::set<int*, indirect_binary_predicate<std::equal_to<int> > > s;
Обратите внимание, что не рекомендуется иметь контейнер необработанных указателей, если указатели предназначены для динамически размещаемых объектов и контейнеравладеет указанными объектами;это не исключение безопасно сделать это.Тем не менее, этот адаптер предикатов должен работать так же хорошо для интеллектуальных указателей, итераторов или любого другого типа, который поддерживает разыменование.