我正在尝试使用 boost 状态图实现一个简单的状态机。由于我有这个状态机的几个变体,我认为将它包装在模板中并将状态机作为模板参数传递可能是个好主意。
但是,我收到编译错误。
代码:
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/transition.hpp>
namespace sc = boost::statechart;
class ComponentType
{
};
class FSM {
protected:
struct stInit ;
public:
struct Machine : sc::state_machine< Machine, stInit > {};
protected:
struct stInit : ComponentType, sc::simple_state< stInit, Machine > {};
};
template <class fsm>
void run() {
typename fsm::Machine m_fsm;
const ComponentType &t = m_fsm.state_cast<const ComponentType &>();
(void) t;
}
int main() {
run<FSM>();
}
编译错误:
fsmtest.cpp: In function ‘void run()’:
fsmtest.cpp:33:45: error: expected primary-expression before ‘const’
const ComponentType &t = m_fsm.state_cast<const ComponentType &>();
^
fsmtest.cpp:33:45: error: expected ‘,’ or ‘;’ before ‘const’
但是,当使用 typedef 而不是模板时:
typedef FSM fsm;
//template <class fsm>
和
run();
// run<FSM>();
一切都编译没有任何错误。
我错过了什么?
(编译器:g++ 4.8.4,操作系统:Ubuntu 14.04,升压:1.54)