|
Boost Users : |
Subject: Re: [Boost-users] [lambda] extract a constant subexpression by introspection
From: alfC (alfredo.correa_at_[hidden])
Date: 2010-05-26 01:07:24
On May 21, 6:21 pm, alfC <alfredo.cor..._at_[hidden]> wrote:
> I have a lambda expression that is suppoalways constructed as
> [some lambda expression] / ( _1 - c);
> What I need is a function that given the expression returns the
> internal value of c, if that is possible:
Answering to myself, hope it is useful to someone else:
It turns out that extracting c from the lambda expression f_expr is
quite easy. just
boost::tuples::get<1>(boost::tuples::get<1>(f_expr.args).args),
The tricky part is to write the argument type of the function that
extracts 'c' only in the case that the expression if of type 'XX/(_1-
c)'
Below is the full function that has to be defined to extract c, if the
expression is not of type XX/(_1-c) the function is not even
instantiated:
template<class LambdaExp>
double extract_c(
//typename simple_rational_function<LambdaExp>::type const& //
doing a convenient typedef doesn't work, at least for gcc
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>
>,
double const // <-- attention adds const to avoid unreadable
errors
>
> >
>
> >
f_expr){
return
boost::tuples::get<1>(boost::tuples::get<1>(f_expr.args).args);
}
Suggestions accepted,
Alfredo
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