使用Boost状态图,我如何无条件地过渡到一个状态



我有一个状态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 /includ
e/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 >();
        }
};

最新更新