boost::msm ライブラリを使用して、コード内にステート マシンを作成しようとしています。状態の文字列名 (int id ではない) を取得する方法を知っている人はいますか? ロギング/デバッグの目的でこれを取得しようとしています。たとえば、no_transition 関数では状態 ID を取得しますが、読みやすいように名前を取得しようとしています。
template <class Event ,class Fsm>
void no_transition(Event const& e, Fsm& fsm, int stateId)
{
//This is what I'm trying:
auto state = fsm.get_state_by_id(stateId); //This returns a boost::msm::front::default_base_state. Anything I can override in there to set a name?
const char* stateName = state->getStateName(); //I want to do something like this since I can do e.getEventId()
print("FSM rejected the event %s as there is no transition from current state %s (%d)\n", e.getEventId(), stateName, stateId);
}
イベントと状態を定義する方法は次のとおりです。
struct Idle : front::state<> {
static const char* const getStateName() {
return "Idle";
}
};
イベント:
struct SampleEvent {
SampleEvent() {}
static const char* const getEventId() {
return "SampleEvent";
}
};
どんなアイデアでも素晴らしいでしょう。ありがとう!