私はC++とBoostステートチャートにかなり慣れていないことを認めなければなりません。Statechartライブラリで少し遊んで、「より大きな」ステートマシンを構築したいと思いました。
私の問題の非常に簡単な例を挙げます。状態が1つだけで、自己遷移が多いステートマシンを想定します。そのようなものを構築する方法は?20を超える遷移はすべて、gcc(4.5.2)コンパイラによって拒否されます(「テンプレート引数の数が間違っています(21、20である必要があります)」)
サンプルコードは次のとおりです。
#include <boost/statechart/event.hpp>
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/transition.hpp>
#include <iostream>
#include <boost/mpl/list.hpp>
namespace sc = boost::statechart;
struct MyEvent1: sc::event<MyEvent1> {};
struct MyEvent2: sc::event<MyEvent2> {};
//...
struct MyEvent21: sc::event<MyEvent21> {};
struct MyState;
struct Statemachine: sc::state_machine<Statemachine, MyState> {};
struct MyState: sc::simple_state<MyState, Statemachine> {
typedef boost::mpl::list<
sc::transition< MyEvent1, MyState > ,
sc::transition< MyEvent2, MyState > ,
//...
sc::transition< MyEvent21 >
> reactions;
};
int main() {
//..
return 0;
}