gpt4 book ai didi

c++ - 通过转换 boost 状态图传递参数

转载 作者:太空狗 更新时间:2023-10-29 19:44:32 26 4
gpt4 key购买 nike

我正在尝试学习 boost::statechart。

我想制作一个加载文件的小应用。

//  --------------------------------
// | |
// | O Project |
// | | |
// | v |
// | ---------------------------- |
// | | | |
// | | Unloaded | |
// | ---------------------------- |
// | | ^ |
// | | EvLoad | EvUnload |<-----O
// | v | |
// | ---------------------------- |
// | | | |
// | | Loaded | |
// | ---------------------------- |
// | | ^ |
// | | | EvLoad |
// | ----- |
// --------------------------------

但是我如何将参数传输到状态,例如文件名?如果我将文件名存储在 EvLoad 中,我可以轻松访问它以进行状态 react

struct Loaded : sc::simple_state< Loaded, Project>
{
typedef sc::custom_reaction< EvLoad > reactions;
sc::result react( const EvLoad & e )
{
//load file e.path()
...
return discard_event();
}
}

但是当我处于 Unloaded 状态时,我正在调用 Loaded 的构造函数,但我无法将参数传递给它。我想出的唯一解决方法是在进行转换之前重新发布事件,但这对我来说看起来有点脏。

struct Unloaded : sc::simple_state< Unloaded, Project >
{
typedef sc::custom_reaction< EvLoad > reactions;
sc::result react( const EvLoad & e )
{
post_event( e ); //workaround to pass the event to the loaded state
return transit<Loaded>();
}
};

有更好的选择吗?

最佳答案

我们使用triggering_event方法拉取触发事件,然后将数据作为成员变量附加到触发事件上即可。它节省了大量编码工作,使我们不必生成自定义 react 或将转换变量附加到状态图(我见过的两种常见方法)。

关于c++ - 通过转换 boost 状态图传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com