Matthias Kaeppler
David Abrahams wrote:
Careful; vector iterators are not neccessarily pointers.
Hm yes, that's true. But does this matter? I have a vector of some type, and a vector of pointers to some type. I don't even deal with iterators when working on the pointer-vector.
Sorry, I read your post too quickly and jumped to the wrong conclusion.
struct indirect_less { template <class It> bool operator()(It i1, It i2) const { typedef typename std::iterator_traits<It>::value_type value_type; return std::less
()(i1,i2);
Whoops; I meant:
return std::less
} }; sort(ptrcoll.begin(), ptrcoll.end, indirect_less());
Ah I see. But what, if I want to abstract from the predicate? I want to create a class which is as generic as possible, so I don't have to rewrite it for each and every possible predicate.
I take it from reading this message and your other one that you mean you want to write an adapter for any binary predicate on T that will instead take arguments that can be dereferenced to get Ts and forward those Ts on to the underlying binary predicate (but that's not really clear)? template <class Pred> struct indirector { indirector(Pred const& p) : p(p) {} template <class It> bool operator()(It i1, It i2) const { typedef typename std::iterator_traits<It>::value_type value_type; return p(i1,i2); } Pred p; }; template <class Pred> indirector<Pred> indirect(Pred const& p) { return indirector(p); } sort(ptrcoll.begin(), ptrcoll.end, indirect(less<int>())); HTH -- Dave Abrahams Boost Consulting www.boost-consulting.com