Boost logo

Boost Users :

From: Andreas Huber (ahd6974-spamboostorgtrap_at_[hidden])
Date: 2008-06-18 17:54:52


Hi Felipe

>> Not currently. triggering_event(), which is on position 2 of the to-do
>> list, would allow ctors, dtors & exit() functions to access the event
>> that triggered the state entry or exit. Since these can be triggered by
>> events of different types, the function only returns the base class
>> event, which needs to be down-cast by the user. I'm not very happy with
>> this interface though, so I will also consider the possibility to
>> type-safely pass the triggering event to state constructors that accept
>> a corresponding parameter. AFAICS, this would require a SFINAE compiler
>> (i.e. a very compliant compiler). Unfortunately, due to inevitable
>> type-erasure when the state is stored in state_machine, the same doesn't
>> seem to be possible with exit() functions, at least not without major
>> performance hits.
>
> Hi, has anything improved in this matter?

No, unfortunately.

> I find two-phase construction not something desirable.

Neither do I, but I have come to the conclusion that it's probably the best
of all approaches. As mentioned, triggering_event() wrecks type-safety and
type-safely calling the right constructor is only a half-backed solution
(doesn't work with exit()).

triggering_event() might still be necessary for rare corner-cases, which is
why it is still on the to-do list. I certainly haven't received many
requests in this direction.

> I would really want to pass a state instance to transit<>().
> Why isn't this available?

Um, why do you want pass a *state* object to transit<>()? State construction
& destruction must be done by the state machine itself.

Regards,

-- 
Andreas Huber
When replying by private email, please remove the words spam and trap
from the address shown in the header. 

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