关于 Boost Statechart 中状态变化的通知
Notification about state change in Boost Statechart
是否有一种直接的方法可以在 Boost Statechart 中注册状态更改?
对于 Digital Camera 示例,假设我决定向应用程序添加 GUI。除了查询状态之外,是否有可能收到有关状态之间转换的通知?
if(0 != state_cast<const State1 *>())
{
context<OuterCotext>().Notify(1);
}
else if(0 != state_cast<const State2 *>())
{
context<OuterCotext>().Notify(2);
}
了解您已更改状态的最简单方法是进入前一个状态的析构函数,然后进入新状态的构造函数。
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <iostream>
namespace sc = boost::statechart;
struct Greeting;
struct Machine : sc::state_machine< Machine, S1> {};
struct S1 : sc::simple_state<S1, Machine>
{
S1()
{ // entry
std::cout << "Enter S1\n";
}
~S1()
{ // exit
std::cout << "Exit S1\n";
}
};
int main()
{
Machine myMachine;
myMachine.initiate();
return 0;
}
在 boost.statechart
中,onEntry
/onExit
动作由 constructor
/destructor
对实现,因为状态实例仅在状态是机器的当前状态。
所以你想要记录、注册、登录状态变化(进入或退出)的一切你都可以在这些特殊功能中完成。
是否有一种直接的方法可以在 Boost Statechart 中注册状态更改?
对于 Digital Camera 示例,假设我决定向应用程序添加 GUI。除了查询状态之外,是否有可能收到有关状态之间转换的通知?
if(0 != state_cast<const State1 *>())
{
context<OuterCotext>().Notify(1);
}
else if(0 != state_cast<const State2 *>())
{
context<OuterCotext>().Notify(2);
}
了解您已更改状态的最简单方法是进入前一个状态的析构函数,然后进入新状态的构造函数。
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <iostream>
namespace sc = boost::statechart;
struct Greeting;
struct Machine : sc::state_machine< Machine, S1> {};
struct S1 : sc::simple_state<S1, Machine>
{
S1()
{ // entry
std::cout << "Enter S1\n";
}
~S1()
{ // exit
std::cout << "Exit S1\n";
}
};
int main()
{
Machine myMachine;
myMachine.initiate();
return 0;
}
在 boost.statechart
中,onEntry
/onExit
动作由 constructor
/destructor
对实现,因为状态实例仅在状态是机器的当前状态。
所以你想要记录、注册、登录状态变化(进入或退出)的一切你都可以在这些特殊功能中完成。