gpt4 book ai didi

c++ - Boost状态图-使用状态图作为模板参数时出现编译错误

转载 作者:行者123 更新时间:2023-11-28 01:57:37 25 4
gpt4 key购买 nike

我正在尝试使用 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,boost:1.54)

最佳答案

您必须让编译器知道您要调用 state_cast 模板函数,这样它才能正确解析该行。变化:

const ComponentType &t = m_fsm.state_cast<const ComponentType &>();

到:

const ComponentType &t = m_fsm.template state_cast<const ComponentType &>();

检查 Where and why do I have to put the "template" and "typename" keywords?了解更多信息。

关于c++ - Boost状态图-使用状态图作为模板参数时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40608836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com