
On Sun, 2008-08-31 at 15:28 +0200, Thomas Klimpel wrote:
Andrey Semashev wrote:
Not exactly. You don't have to override the transit handler unless you want to define some non-trivial transition logic. If you stick to the same degree of functionality that TMP provides (IOW, no runtime conditions for the transition to take place), then you can use the fsm::transition class as a direct replacement for the row template in the TMP approach.
If you have to decide when and which state to transit to in runtime, then yes, you have to define your custom transition rule.
But how can I specify the "transition action", if not by overriding the "transit" method?
As I said, if you need some non-trivial (i.e. something more complex than a mere call to switch_to), you have to implement the transit handler. Otherwise, you don't have to do that and you get precisely what the TMP solution provides.
And even if I override the "transit" method, how should I handle the fact that the event will still be delivered to the target state?
Process the event. Every event passed to the state machine must be processed in some way - either in one of the on_process handlers, or in the unexpected events handler. You cannot cancel the event delivery because the machine has to return something from the FSM's process method.