>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?
Unfortunately not in the general case.
But in your use case, maybe. There is already in state_machine<> an
enqueue_event() and an execute_queued_events(). Could this help?