我正在尝试学习提升的元状态机(MSM)库。
遵循http://redboltz.wikidot.com/simple-state-machine中的简单状态机示例,我遇到了一些问题:
我在定义状态机"转换表"时遇到问题。使用boost::mpl::vector
。
// Transition table
struct transition_table:mpl::vector<
// Start Event Next Action Guard
msmf::Row < State1, Event1, End, msmf::none, msmf::none >
> {};
Qt Creator IDE无法检测并自动完成mpl::vector
(它只识别编号版本,即mpl::vector0/1
...)!!!
代码编译(没有错误),但是当我运行它时崩溃(在state_machine_def.hpp
的第203行,这是关于FSM的转换处理程序)
我使用Qt 5.9.0 MinGW 32位编译器在Windows 7上使用Boost 1.66。
我已将boost路径添加到包含路径(因为MSM和MPL只是标题库)
Q1 - 为什么我的系统无法识别
boost::mpl::vector
?Q2 - 用
mpl::vector
替换mpl::vector1
(我的IDE,QtCreator识别)无法解决我的问题(运行时崩溃)
提醒:上例中的SM只有一个转换条目。
非常感谢任何帮助
答案 0 :(得分:0)
没关系。完成引擎可能配置错误或使用旧标准 - 这意味着它无法理解所有升级标头。
mpl::vector
实际上只是一个类型列表,所以没有&#34; intellisense&#34;期待:你只能给它类型,编译器无法预测你想要的类型。
mpl::vector<int, double, std::string>
与mpl::vector<>
同样有效。
重要的是你的编译器理解它。所以,显然它确实如此。
如果遇到运行时错误,请找出有关崩溃的信息。链接中的代码
参见^
Q1
它确实识别boost::mpl::vector
或者它不会编译。见2.
<强> Q2 强>
没有区别:两者都模拟完全相同的类型序列。一个是可变的,另一个是#34;数字&#34; (即具有固定长度):https://www.boost.org/doc/libs/1_66_0/libs/mpl/doc/refmanual/vector.html