|
Boost Users : |
From: Server Levent Yilmaz (leventyilmaz_at_[hidden])
Date: 2007-01-11 19:52:29
Hi Mark,
On 1/11/07, Mark Ruzon <ruzon_at_[hidden]> wrote:
>
> Assume we have a range of objects of type tuple<T1,T2> and a function
> object that compares two objects of type T1. How would a person sort this
> range using this function object and bind? I want something along the
> lines of:
>
> std::sort(first, last, boost::bind<bool>(comp,
> boost::bind(boost::get<0>, _1),
> boost::bind(boost::get<0>, _2)));
>
>
as Peter pointed out using overloaded function templates are a pain.
However, if you define this one little get function (not even a functor) you
may use it with bind easily:
template< int N, class Tup > inline
typename boost::tuples::element<N,Tup>::type& get(Tup& t)
{
return boost::tuples::get<N>(t);
}
Then, inside some scope where you can access this and bind arguments to your
custom comparison functor
typedef boost::tuples::tuple<int,float> tup;
std::vector< tup > a(5);
namespace b = boost;
std::sort( a.begin(), a.end(),
b::bind( mycompare, b::bind(get<0,tup>, ::_1), b::bind(get<0,tup>, ::_2)
)
);
Now that you want to play around with these "beauties" (bind, tuple, etc..),
here <http://rafb.net/p/q8aeR482.html> is a piece of compiling (and
working) code which you might find entertaining. It also uses
Boost.Lambdato fill-up the tuple vector, print-it out and sort with an
inline lambda
expression in addition to boost::bind'ed externally crafted functor.
hth
- levent
-- Server Levent Yilmaz Mechanical Engineering @ PITT
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net