|
Boost Users : |
Subject: Re: [Boost-users] [msm] extending msm::back::state_machine
From: Manuel Schiller (caligano_at_[hidden])
Date: 2014-09-08 00:17:43
Hi Christophe,
thanks for the reply.
The reason I want to extend the backend is that I need to maintain a
separate event queue (a job queue).
In reality, "test()" is a function template, so I cannot use virtual
functions.
If I implement this function template in the frontend, I need to
static_cast to the backend, which I try to avoid:
struct fsm_ : public boost::msm::front::state_machine_def<fsm_>
{
typedef msmb::state_machine<fsm_> BackMachine;
template <typename EventType>
void enqueue_job(const EventType& evt)
{
job_queue.push(
std::bind(&BackMachine::template
process_event<EventType>, static_cast<BackMachine*>(this), evt)
);
}
// ...
};
Is there any third option?
Bye,
Manuel
2014-09-07 21:42 GMT+02:00 <christophe.j.henry_at_[hidden]>:
> Hi,
>
> >
> >When compiling the attached example, I get this error message
> *>error: âclass boost::msm::back::state_machine<fsm_,
> boost::parameter::void_, boost::parameter::void_, boost::parameter::void_,
> boost::parameter::void_>â has no member named âtestâ*
> >
> >
> >How can I "inject" extended_back_machine as the type being passed as
> "FSM" to the state?
> The argument passed to on_entry is not extended_back_machine because MSM
> does not know about it. You can either:
>
> - implement test() within the fsm_ front-end
> - provide a virtual, empty implemented test() within the front end and let
> the compiler find out itself about the overriden one: virtual void test(){}
>
> HTH,
> Christophe
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
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