【问题标题】:With boost::msm eUML, if I give attributes_ << to the state machine or state, how do I (re)set them?使用 boost::msm eUML,如果我将 attributes_ << 赋予状态机或状态,我该如何(重新)设置它们?
【发布时间】:2012-08-29 00:56:48
【问题描述】:

如果我为事件添加属性,我知道我可以像使用函数一样使用事件名称...

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 的值?

最后,

有没有办法在对象创建后改变属性?

例如,我想为状态机设置一个属性,并且在我的一个状态中,记住一些我可以存储在状态机中的信息。 (在这种情况下,我想存储一个套接字。)

谢谢。

【问题讨论】:

    标签: boost-msm


    【解决方案1】:

    如何设置 someAttribute1 的值? 你可以:

    • 更改刚刚获得的引用(get_attribute 返回引用):++evt.get_attribute(someAttribute1)。
    • 使用函子直接在表中写入属性。例如,可以执行以下操作:/++fsm_(someAttribute1)

    对于州,您也可以这样做。对于状态机,同样如此。 同样,您可以在操作中使用 Fsm 模板参数,也可以使用仿函数(fsm_、event_ 等)

    您可以在示例或测试中找到很好的示例(例如 test/CompositeEuml.cpp 或 test/AnonymousEuml.cpp)。

    HTH, 克里斯托夫

    【讨论】:

    • 谢谢,克里斯托夫。实际上我发现我的问题是,我相信,一个错误。我向邮件列表提交了一条关于它的消息。这是非常模糊的。我可以随意让它工作或不工作。
    • 这里有一些示例代码显示了我遇到的问题:dl.dropbox.com/u/22399463/example.zip 我已提交到邮件列表,但这是我的第一篇文章,我不知道我是否已正确完成所有操作.当您在作为 fsm 的入口操作的操作中设置 fsm 属性并且 fsm 是另一个 fsm 的子状态,并且恰好也是父 fsm 的初始状态时,就会出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多