【问题标题】:[Boost].SML pass guard parameters[Boost].SML 通关参数
【发布时间】:2020-04-26 17:56:45
【问题描述】:

我开始使用 [Boost].SML,但我只是不知道如何检查变量。我正在尝试实现一台 ATM 机,您必须在其中输入一个代码才能访问。所以我在尝试这个: 守护

    const auto right_PIN = [](int pin){ cout << "PIN VALUE: " << pin << endl;
                                    if(pin == 1234){
                                        return true;
                                    }else{
                                        return false;
                                    }
                                };

像这样的转换表:

startState + event [right_PIN]  = rightState,
startState + event [!right_PIN] = wrontState,

现在在我处理事件之前,我想将参数传递给警卫以检查其是否正确。

这可能吗?

【问题讨论】:

  • 我想我应该可以回答这个问题,但如果没有 SSCCE 或MCVE,我将无法开始
  • 谢谢,但我想我找到了解决方案。你能看看我的回答吗?您需要任何进一步的信息来审查它吗?提前致谢
  • 太棒了。我发现没有完整代码很难查看答案,但是发布您自己的答案非常棒,因此将来可能会对其他人有所帮助

标签: c++ boost


【解决方案1】:

我想我找到了解决办法。

起初我声明了一个结构 PIN,其值如下:

struct PIN {
    int value{};
};

然后我更新了守卫并在实现状态机的结构中实现了它:

const auto right_PIN = [](PIN& pin){ cout << "PIN VALUE: " << pin.value << endl;
                                    return pin.value == 1234;
                                };

在我的主要方法中,我创建了一个 struct pin 的对象并将其提供给状态机:

PIN p;
boost::sml::sm<bk> sm{p};

然后在处理事件之前,我刚刚更新了 PIN 的值:

p.value = 1234;
sm.process_event(event());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2015-04-07
    • 2020-04-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多