如何从/从/增强MSM statemachine的数据
How to exchange data from/to boost MSM statemachine
我是MSM的新手,我认为这是一个很棒的工具,尤其是EUML前端方法。但是,经过几天的阅读,我仍然不确定如何在MSM EUML定义的statemachine和外部世界之间交换数据。在我看来,两种可能的方法是:
-
使用" attributes_< ant1"将属性添加到statemachine中,然后以某种方式从外部世界访问attr1
-
使用全局变量,其中FSM操作功能存储数据和外部代码读取数据
我还没有找到其他更好的方法。关于方法1,我不确定如何从外部访问attr1。我想" FSM_(ATTR1("仅由FSM内部函数或方法用于访问属性。因此,有没有办法做事列表" FSM.ATTR1"以供局外人读取数据?
关于方法2,显然全局变量是我们一直试图避免的事情。
欢迎任何建议!
您可以使用以下步骤进行操作:
首先定义属性。
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(type,name)
例如,
BOOST_MSM_EUML_DECLARE_ATTRIBUTE(std::stringstream,my_attr_logger)
访问属性。
fsm.get_attribute(name)
例如,
template <class Event,class FSM>
void on_entry(Event const& /*evt*/,FSM& fsm)
{
std::cout << "entering: Empty" << std::endl;
fsm.get_attribute(my_attr_logger) << "entering: Emptyn";
}
get_attribute((和名称是关键点的组合。
**创建具有属性的状态计算机。
在例如,
// create a state machine "on the fly"
BOOST_MSM_EUML_DECLARE_STATE_MACHINE(( transition_table, //STT
init_ << Empty, // Init State
no_action, // Entry
no_action, // Exit
attributes_ << my_attr_logger, // ==== Attributes
configure_ << no_configure_, // configuration
Log_No_Transition // no_transition handler
),
player_) //fsm name
**最后,通过状态机器后端从外部访问属性。
statemachine_backend.get_attribute(name)
例如,
std::cout <<p.get_attribute(my_attr_logger).str() << std::endl;
您可以使用状态机的前端和后端的get_attribute()
。
演示
这里正在运行演示:https://wandbox.org/permlink/nkqb2pex5azkebou
my_attr_logger是属性的名称。
我刚刚添加了std::stringstream
作为属性。基本代码是官方示例代码。请参阅https://www.boost.org/doc/libs/1_66_0/libs/mmsm/doc/html/examples/simplephoenix.cpp
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 如何从/从/增强MSM statemachine的数据