2011-10-12 80 views
4

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

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

编辑:这里是我到目前为止已经试过:

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 

回答

2

我已经更新了我的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>(); 
     } 
}; 
+0

您不应该用正确答案更新问题,只需回答问题。人们喜欢看到最初的问题。 –

+0

@GregorBrandt - 我的错误,我已经恢复到我原来的问题(我认为),应该修复一切。谢谢! – nickb

+0

那么,基本上,你忘了上下文?它总是有助于明确指出哪些更正。 – Xeo