Boost logo

Boost Users :

Subject: Re: [Boost-users] [phoenix][lambda] lambda to phoenix translation: get sig (signature) from actor
From: alfC (alfredo.correa_at_[hidden])
Date: 2010-05-29 21:48:53


> I'm not sure if it's a good idea to go beyond the documented features.
> The more you do this, the more work you'll have to do in porting it
> to Phoenix-3. What is it you are trying to do?

thank you for the advise.
What I am trying to do mixes boost.units with lambda/phoenix
expressions
I had a function that worked well with lambda and I am trying to make
it work with phoenix.
In a previous post I asked how to translate the argument, which is
done, of the following function (called qawc) and
now I am trying to translate the result type.

template<class LambdaExp, class UnitIntegrandDomain>
        typename multiply_typeof_helper< \
                typename divide_typeof_helper< \
                        quantity<typename LambdaExp::template
sig<tuple<quantity<UnitIntegrandDomain> > >::type::unit_type>, \
                        quantity<UnitIntegrandDomain> \
>::type, \
                quantity<UnitIntegrandDomain> \
>::type
qawc(
        lambda_functor<lambda_functor_base<
                        arithmetic_action<divide_action>,
                        tuple<
                                lambda_functor<//
                                        LambdaExp
>,//
                                lambda_functor<lambda_functor_base<
                                                arithmetic_action<minus_action>,
                                                tuple<
                                                        lambda_functor<
                                                                placeholder<1>
>,
                                                        quantity<UnitIntegrandDomain> const
>
> >
>
> > f_expr,
        boost::numeric::interval<quantity<UnitIntegrandDomain> > const& iv
){
        typedef RET_TYPE ret_type;
        double const c = get<1>(get<1>(f_expr.args).args).value();
        double ret = gsl::integration::qawc(
                bind(
                        &LambdaExp::template sig<tuple<quantity<UnitIntegrandDomain> >
>::type::value,
                        get<0>(f_expr.args)
(bind(&quantity<UnitIntegrandDomain>::from_value, _1))
                ),
                boost::numeric::interval<double>( lower(iv).value() ,
upper(iv).value() ),
                c
        );
        return ret_type::from_value(ret);
}


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