2011-06-30 3 views
1

Dans l'implémentation d'une machine d'état utilisant Boost.Statechart, j'ai rencontré un problème découlant de la tentative d'accès au contexte externe d'un simple_state à partir de son constructeur. Un commentaire à simple_state.hpp me dit:Dans Boost.Statechart, quelle est la différence entre state et simple_state?

// This assert fails when an attempt is made to access an outer 
    // context from a constructor of a state that is *not* a subtype of 
    // state<>. To correct this, derive from state<> instead of 
    // simple_state<>. 

Outre apparemment pouvoir accéder au contexte extérieur de son constructeur, quelles différences ou sont les implications dans l'utilisation state<> au lieu de simple_state<> que la classe de base pour mes états?

Répondre

3

Il existe un certain nombre d'autres choses que vous pouvez faire à partir d'un état <> constructeur dérivé que vous ne pouvez pas faire à partir d'un constructeur dérivé de simple_state <>. Il existe une liste dans la documentation de la classe d'état. J'ai trouvé que les événements de publication étaient le grand avantage de dériver de l'état <>. Cela fait longtemps que je ne l'ai pas utilisé, mais je ne me souviens pas d'autres implications, à part que vous ayez à implémenter le constructeur de transfert pour chaque classe dérivée de l'état (indiqué dans docs), l'état <> est dérivé de simple_state <>.

+0

Merci! Je l'ai trouvé dans les documents ici: http://www.boost.org/doc/libs/1_46_1/libs/statechart/doc/reference.html#ClassTemplatestate, qui stipule: "Les sous-types d'états directs et indirects doivent fournir un constructeur avec la même signature que le constructeur d'état <>, en transmettant le paramètre de contexte. " – drfrogsplat

Questions connexes