A PrimitiveTransform that transforms the child expressions of an expression node according to the corresponding children of a Grammar. More...
#include <pass_through.hpp>
Classes | |
struct | impl |
Public Types | |
typedef pass_through< Grammar, Domain > | transform_type |
Public Member Functions | |
BOOST_PROTO_CALLABLE () typedef X proto_is_transform_ | |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &)> ::result_type | operator() (Expr &&e) const |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &, State const &)> ::result_type | operator() (Expr &&e, State &&s) const |
BOOST_FORCEINLINE boost::proto::detail::apply_transform < transform_type(Expr const &, State const &, Data const &)> ::result_type | operator() (Expr &&e, State &&s, Data &&d) const |
A PrimitiveTransform that transforms the child expressions of an expression node according to the corresponding children of a Grammar.
Given a Grammar such as plus<T0, T1>
, an expression type that matches the grammar such as plus<E0, E1>::type
, a state S
and a data V
, the result of applying the pass_through<plus<T0, T1> >
transform is:
The above demonstrates how child transforms and child expressions are applied pairwise, and how the results are reassembled into a new expression node with the same tag type as the original.
The explicit use of pass_through<>
is not usually needed, since the expression generator metafunctions such as plus<>
have pass_through<>
as their default transform. So, for instance, these are equivalent:
For example, consider the following transform that promotes all float
terminals in an expression to double
.
|
inherited |
|
inherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |