Boost logo

Boost Users :

Subject: Re: [Boost-users] [fusion] transform and transform_view
From: Joel de Guzman (joel_at_[hidden])
Date: 2011-04-22 08:02:25


On 4/22/2011 8:47 PM, Karsten Ahnert wrote:
> Hi,
>
> I have a small functor:
>
> struct operation {
> template<class> struct result;
>
> template< class F>
> struct result<F(int)> {
> typedef long type;
> };
>
> template< class F>
> struct result<F(float)> {
> typedef double type;
> };
>
>
> template< class T>
> typename result< operation(T)>::type operator()( T t ) {
> typedef typename result< operation(T)>::type result_type;
> return result_type( t * T( 2 ) );
> }
> };
>
> and I wonder why a transform_view works as expected:
>
> typedef fusion::vector< int , float> vector_type;
> vector_type v( 1 , 3.4 );
> fusion::transform_view< vector_type , operation> tv( v , operation() );
>
> while
>
> result_of::transform does not:
>
> fusion::result_of::transform< vector_type , operation>::type tv2
> = fusion::transform( v , operation() );
>
> result in compile errors? Any hints?

Try:

     fusion::result_of::transform< vector_type const, operation >::type tv2
     = fusion::transform( v , operation() );

Notice the const. As of now, Fusion many algos accept only const
sequences. There's a rationale why: Fusion algos are basically
non-mutating and returns views. Anyway, I intend to relax this
restriction and accept non-const sequences soon.

Regards,

-- 
Joel de Guzman
http://www.boostpro.com
http://boost-spirit.com

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