|
Boost Users : |
Subject: Re: [Boost-users] fusion::result_of::transform<Seq1, Seq2, F> -- argument dependent result type
From: e r (erwann.rogard_at_[hidden])
Date: 2008-09-12 23:48:39
e r wrote:
> Steven Watanabe wrote:
>> AMDG
>>
>> e r wrote:
>>> // probably not what result_of::transform expects, based on compile
>>> // errors (below)
>>> template<typename Metafun,typename Arg2>
>>> struct result{
>>> typedef typename Metafun::type type;
>>> };
>>>
>> Fusion uses Boost.ResultOf.
>> http://www.boost.org/doc/libs/1_36_0/libs/utility/utility.htm#result_of
>>
>> In Christ,
>> Steven Watanabe
>
> Thanks. I read the link above before posting as well as the proposal:
>
> //example from proposal.
> struct square_ {
> template<typename T> struct result {
> typedef T type;
> }
>
> template<typename T> T operator()(T& x) const
> {
> return x*x;
> }
> };
>
> but I'm not qualified enough to deduce the right answer in my case. i
> thought id would be like this:
>
> template<typename Arg1>
> struct fun{
> template<typename Metafun,typename Arg2>
> struct result{
> typedef typename Metafun::type type;
> };
>
> template<typename Metafun,typename Arg2>
> typename Metafun::type
> operator()(const Metafun& meta,const Arg2& arg2)const{
> typedef typename Metafun::type result_type;
> return result_type(args,arg2);
> }
> };
>
> but apparently it's not correct. I guess I can't fully make sense of
> F::result<F(T1, T2, ..., TN)>::type. any hint here would be really helpful.
>
> thanks!
I may have made a little bit of progress here...
struct fun{
template<typename Signature> struct result;
template<typename A>
struct result<fun(const A&)>{
typedef A type;
};
template<typename A>
A operator()(const A& a)const{
return A();
};
};
typedef boost::result_of<fun(const my&)>::type result_type;
BOOST_MPL_ASSERT(
(
mpl::is_same<
result_type,
my
>
)
);
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