0

イベントに属性を追加すると、イベント名を関数のように使用できることがわかります...

BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(*someEvent*, *someAttributeList*)

someStateMachine.process_event(
   someEvent (
      valueOfSomeAttribute1, // sets the attribute value here
      valueOfSomeAttribute2))

そして、アクションの中で、書くことでこれを取り戻すことができます

evt.get_attribute(someAttribute1);  // retrieve the attribute value

ここで、マシン全体に属性を設定すると、次のようになります。

BOOST_MSM_EUML_DECLARE_STATE_MACHINE((transition_table,
                         init_ << initState,
                         Entry_Action, 
                         Exit_Action, 
                         attributes_ << someAttribute1 << someAttribute2,
                         configure_<< someConfigurationStuff ),
                         newStateMachineType)

someAttribute1 の値を設定するにはどうすればよいですか?

州に対する同じ質問:

BOOST_MSM_EUML_STATE(
       (someEntryAction,
        someExitAction,
        attributes_ << someAttribute1,
        configure_<< someConfigurationStuff)
       ,newStateName)

someAttribute1 の値を設定するにはどうすればよいですか?

ついに、

オブジェクトの作成後に属性を変更する方法はありますか?

たとえば、ステート マシンの属性を設定したいのですが、状態の 1 つで、ステート マシンに保存できる情報を覚えておきます。(この場合、ソケットを格納したい。)

ありがとう。

4

1 に答える 1

1

someAttribute1 の値を設定するにはどうすればよいですか? あなたはできる:

  • 取得したばかりの参照を変更します (get_attribute は参照を返します): ++evt.get_attribute(someAttribute1)。
  • ファンクターを使用して、属性をテーブルに直接書き込みます。たとえば、次のアクションが可能です: /++fsm_(someAttribute1)

状態についても、同じことができます。ステート マシンについても同様です。ここでも、アクションで Fsm テンプレート パラメーターを使用するか、ファンクター (fsm_、event_ など) を使用できます。

例またはテストですべての良い例を見つけることができます (たとえば、test/CompositeEuml.cpp または test/AnonymousEuml.cpp)。

HTH、クリストフ

于 2012-08-31T15:13:43.170 に答える