c – 使用Boost状态图,我如何无条件地转换到状态?

c – 使用Boost状态图,我如何无条件地转换到状态?,第1张

概述我有一个状态A,一旦A的构造函数完成,我就无条件转换到下​​一个状态B.这可能吗? 我尝试从构造函数发布一个事件,即使它编译也不起作用.谢谢. 编辑:这是我到目前为止所尝试的: struct A : sc::simple_state< A, Active >{ public: typedef sc::custom_reaction< EventDoneA > react 我有一个状态A,一旦A的构造函数完成,我就无条件地转换到下​​一个状态B.这可能吗?

我尝试从构造函数发布一个事件,即使它编译也不起作用.谢谢.

编辑:这是我到目前为止所尝试的:

struct A : sc::simple_state< A,Active >{    public:        typedef sc::custom_reaction< EventDoneA > reactions;        A()        {            std::cout << "InsIDe of A()" << std::endl;            post_event( EventDoneA() );        }        sc::result react( const EventDoneA & )        {            return transit< B >();        }};

这会产生以下运行时断言失败:

Assertion Failed: get_pointer( pContext_ ) != 0,file /include/boost/statechart/simple_state.hpp,line 459
解决方法 我用我的解决方案更新了我的OP,在这里我可以关闭这个问题.

问题是你不能从simple_state继承来实现所需的转换,你必须从state继承,然后要求你相应地修改构造函数.

struct A : sc::state< A,Active >{    public:        typedef sc::custom_reaction< EventDoneA > reactions;        A( my_context ctx ) : my_base( ctx )        {            std::cout << "InsIDe of A()" << std::endl;            post_event( EventDoneA() );        }        sc::result react( const EventDoneA & )        {            return transit< B >();        }};
总结

以上是内存溢出为你收集整理的c – 使用Boost状态图,我如何无条件地转换到状态?全部内容,希望文章能够帮你解决c – 使用Boost状态图,我如何无条件地转换到状态?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存