我不得不承认我对 C++ 和 Boost Statecharts 还很陌生。我玩了一下 Statechart 库,想构建一些“更大”的状态机。
我举了一个非常简单的例子来说明我的问题。让我们假设一个状态机只有一个状态和很多自转换。如何构建这样的东西?gcc(4.5.2) 编译器拒绝超过 20 个转换的所有内容(“模板参数的数量错误(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;
}