你需要使用sc::deferral
来达到同样的效果。您想要做的可以通过以下代码实现。
// States
struct S1;
struct S2;
struct S3;
struct S4;
// Events
struct E1 : sc::event<E1> {};
struct E2 : sc::event<E2> {};
struct E3 : sc::event<E3> {};
struct statemachine : sc::state_machine<statemachine, S1>{};
struct S1 : sc::simple_state<S1, statemachine> {
typedef mpl::list<
sc::transition< E1, S2 >,
sc::deferral< E2 >,
sc::deferral< E3 >
> reactions;
};
struct S2 : sc::simple_state<S2, statemachine> {
typedef sc::transition<E2, S3> reactions;
};
struct S3 : sc::simple_state<S3, statemachine> {
typedef sc::transition<E3,S4> reactions;
};
struct S4 : sc::simple_state<S4, statemachine> {
};
int main() {
statemachine sm;
sm.initiate();
// Event Sequence E2 -> E3 -> E1
sm.process_event(E2());
sm.process_event(E3());
sm.process_event(E1());
return 0;
}
在 STATE "S1" 中,我们推迟了对事件 "E2" 和 "E3" 的处理,这些事件随后在 STATE "S2" 和 "S3" 中处理
希望清楚..
注意:需要添加头文件
#include <boost/statechart/deferral.hpp>
才能使用sc::deferral