Boost logo

Boost :

Subject: Re: [boost] boost [msm] deferring event by base type.
From: Juraj Ivančić (juraj.ivancic_at_[hidden])
Date: 2010-06-25 06:59:15


On 25.6.2010 10:40, Richard Szabo wrote:

> I'm now using Row and Defer functor I have now an other problem whit the :
>
> void defer_event(Event const& e)
> {
> // to call this function, you need either a state with a
> deferred_events typedef
> // or that the fsm provides the activate_deferred_events typedef
> BOOST_MPL_ASSERT(( has_fsm_deferred_events<library_sm> ));
> execute_return (library_sm::*pf) (Event const& evt)=
> &library_sm::process_event;
> Event temp (e);
> ::boost::function<execute_return ()> f= ::boost::bind(pf, this,temp);
> post_deferred_event(f);
> }
>
> actually it tries to instantiate the base class ( Event temp (e); )
> but in my case the base class is an abstract class -> compiler error;
> and after deferring I want to dispatch the original derived event not
> the copy constructed base class instance of the event.

You might try the following:

Instead of making your event class polymorphic, you add a shared pointer
to polymorphic data. E.g.

struct deferred_event
{
     boost::shared_ptr<deferred_event_data_base> event_data;
};

This would solve both issues as you would have a single event to be
deferred, and it would be copyable but would still retain polymorphic
data needed to process event.

HTH


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk