C++ 有限元状态机

测试
cpp 复制代码
#include <iostream>
#include "state_machine.h"

class Context {
public:
    char input;
};

class TurnOn : public sm::Event<Context> {
public:
    bool triggered() {
        if(context->input=='1') {
            std::cout << "switch on" << std::endl;
            return true;
        }

        return false;
    }
};

class TurnOff : public sm::Event<Context> {
public:
    bool triggered() {
        if(context->input=='2') {
            std::cout << "switch off" << std::endl;
            return true;
        }

        return false;
    }
};

class On : public sm::State<Context> {
    void enter() {
        std::cout << "enter On state" << std::endl;
    }

    void execute() {
        std::cout << "execute On state" << std::endl;
    }

    void exit() {
        std::cout << "exit On state" << std::endl;
    }
};

class Off : public sm::State<Context> {
    void enter() {
        std::cout << "enter Off state" << std::endl;
    }

    void execute() {
        std::cout << "execute Off state" << std::endl;
    }

    void exit() {
        std::cout << "exit Off state" << std::endl;
    }
};

int main() {

    TurnOn turn_on;
    TurnOff turn_off;
    On on;
    Off off;

    Context context;
    sm::StateMachine<2, 2, Context> sm(&on, &context);

    sm.transit(&on, &off, &turn_off);
    sm.transit(&off, &on, &turn_on);
    sm.start();

    while(true) {
        std::cin >> context.input;

        sm.update();
    }
}
效果

enter On state

1

execute On state

2

switch off

exit On state

enter Off state

execute Off state

3

execute Off state

1

switch on

exit Off state

enter On state

execute On state

0

参考

https://github.com/Eryk-Mozdzen/state-machine-cpp


创作不易,小小的支持一下吧!

相关推荐
skywalk816310 分钟前
CodeArts碰到问题:CodeArts 智能体使用失败,显示:会话创建失败,请稍后重试
开发语言·python
白露与泡影22 分钟前
从区间锁到行锁:一次高并发写入死锁治理实战
java·开发语言
小短腿的代码世界24 分钟前
VLC-Qt深度解析:Qt应用中的专业视频播放方案
开发语言·qt
丑八怪大丑28 分钟前
Java范型
java·开发语言
加藤不太惠28 分钟前
Nacos简单实用集群创建
java·开发语言·nacos
我能坚持多久30 分钟前
C++的Vector学习:从功能探索到底层实现
开发语言·c++·学习
她说彩礼65万31 分钟前
C语言 动态内存管理
c语言·开发语言·算法
傻啦嘿哟32 分钟前
管好PPT的“骨架”:用Python控制页面与文档属性
开发语言·javascript·c#
凤凰院凶涛QAQ32 分钟前
《C++转java快速入手系列》类与对象篇
java·开发语言·c++
时空系34 分钟前
第8篇:模板与实例——面向对象编程入门(上)python中文编程
开发语言·python