On 01/-10/-28163 08:59 PM, Josef Weinbub wrote:
Hi
Recently I made myself familiar with Phoenix v3, more specifically
with actors.
I did a few test implementations, and I wondered if there is a
way to access the argument types (nested in the context's
environment)
and/or the type of the state(s) (nested in the proto expression)
for the actor's result type declaration.
....
Hi again!
Indeed I have overlooked something, being 'result_of' ... as
provided by the Boost Utility library and adopted
by the C++11 standard. Sorry for that, should have known ..
In case someone else wonders how to approach my problem, checkout
the Boost.Utility::result_of documentation:
http://www.boost.org/doc/libs/1_48_0/libs/utility/utility.htm#result_of
One has to nest a result struct with the functors parameter types in
the Boost.Phoenix actor's evaluation functor.
For the sake of completeness, in the following my previous
evaluation functor is depicted again, but instead
of the static "typedef int result_type;
" we now use the nested result struct:
struct myactor_eval {
template<class> struct result;
template<class F, typename StateExpr, typename Context>
struct result<F(StateExpr, Context)>
{
// here we can relate the return type both to the state type
// and to the functor's argument types ...
typedef ..... type;
};
template <typename StateExpr, typename Context>
typename myactor_eval::result< myactor_eval(StateExpr,
Context) >::type
operator()(StateExpr const& state_expr, Context & ctx)
const {
return ...;
}
};
Best, Josef
PS: Thank you, Joel, for noticing my post and forwarding it to
Thomas - much appreciated!