> Joel de Guzman <joel@boost-consulting.com>
on Thu, 26 Jul 2007 06:59:46 +0800
> > - bind expression with tuple becomes a nightmare
>
> Why? Ah access to the members?
It's a nightmare indeed. I'd say boost::get
is not bindable at all.
typedef tuple<int,
double> two;
vector<two> src;
vector<int>
dst;
// ouch
const int
& (*get_first)(const
cons<two::head_type,
two::tail_type> &) = get<0>;
transform(src.begin(), src.end(), dst.begin(), get_first);
Would not it be cool to write something
like this instead?
transform(src.begin(), src.end(), dst.begin(), get<0>());
And it's not hard to implement it.
namespace boost {
namespace tuples
{
template
<int N>
struct
getter
{
template
<class HT, class
TT>
typename
access_traits<
typename
element<N, cons<HT, TT> >::type
>::non_const_type
operator()(cons<HT,
TT> & c) const
{
return
get<N>(c);
}
template
<class HT, class
TT>
typename
access_traits<
typename
element<N, cons<HT, TT> >::type
>::const_type
operator()(const
cons<HT, TT> & c) const
{
return
get<N>(c);
}
};
}
template <int
N>
tuples::getter<N> get()
{
return
tuples::getter<N>();
}
}
Does fusion have something like this?
Regards,
Roman Perepelitsa
Deutsche Bank Moscow
+7 (495) 660-74-08
---
This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.