提升MPL :: vector无法识别,未定义Meta State Machine(MSM)转换表

时间:2018-04-08 08:50:15

标签: c++ boost qt-creator template-meta-programming state-machine

我正在尝试学习提升的元状态机(MSM)库。

遵循http://redboltz.wikidot.com/simple-state-machine中的简单状态机示例,我遇到了一些问题:

  1. 我在定义状态机"转换表"时遇到问题。使用boost::mpl::vector

    // Transition table
    struct transition_table:mpl::vector<
        //          Start   Event   Next    Action      Guard
        msmf::Row < State1, Event1, End,    msmf::none, msmf::none >
    > {};
    
  2. Qt Creator IDE无法检测并自动完成mpl::vector(它只识别编号版本,即mpl::vector0/1 ...)!!!

  3. 代码编译(没有错误),但是当我运行它时崩溃(在state_machine_def.hpp的第203行,这是关于FSM的转换处理程序)

  4. 我使用Qt 5.9.0 MinGW 32位编译器在Windows 7上使用Boost 1.66。

  5. 我已将boost路径添加到包含路径(因为MSM和MPL只是标题库)

  6. 问题

      

    Q1 - 为什么我的系统无法识别boost::mpl::vector

         

    Q2 - 用mpl::vector替换mpl::vector1(我的IDE,QtCreator识别)无法解决我的问题(运行时崩溃)

    提醒:上例中的SM只有一个转换条目。

    非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

  1. 有什么问题?
  2. 没关系。完成引擎可能配置错误或使用旧标准 - 这意味着它无法理解所有升级标头。

    mpl::vector实际上只是一个类型列表,所以没有&#34; intellisense&#34;期待:你只能给它类型,编译器无法预测你想要的类型。

    mpl::vector<int, double, std::string>mpl::vector<>同样有效。

  3. 重要的是你的编译器理解它。所以,显然它确实如此。

    如果遇到运行时错误,请找出有关崩溃的信息。链接中的代码

  4. 参见^

  5. 是的,否则它就不会编译
  6.   

    Q1

    它确实识别boost::mpl::vector或者它不会编译。见2.

      

    <强> Q2

    没有区别:两者都模拟完全相同的类型序列。一个是可变的,另一个是#34;数字&#34; (即具有固定长度):https://www.boost.org/doc/libs/1_66_0/libs/mpl/doc/refmanual/vector.html