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

nic*_*ckb 6 c++ boost boost-statechart

我有一个状态,一旦 的构造函数完成A,我想B无条件地转换到它的下一个状态A。这可能吗?

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

编辑:这是我迄今为止尝试过的:

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 >();
        }
};
Run Code Online (Sandbox Code Playgroud)

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

Assertion failed: get_pointer( pContext_ ) != 0, file /includ
e/boost/statechart/simple_state.hpp, line 459
Run Code Online (Sandbox Code Playgroud)

nic*_*ckb 5

我已经用我的解决方案更新了我的 OP,在这里我可以结束这个问题。

问题是您不能继承 fromsimple_state来实现所需的转换,您必须继承 from 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 >();
        }
};
Run Code Online (Sandbox Code Playgroud)

  • @Xeo 好点!上下文是必要的,因为我错误地继承自 `simple_state`,而您需要继承自 `state`。 (2认同)