c++ 实现一个状态机 一共3个状态 1秒后自动切换状态 不能使用 switch case 语句
时间: 2024-01-27 21:06:04 浏览: 69
c++ 状态机测试用例
好的,可以使用函数指针数组实现一个简单的状态机。具体实现如下:
```c++
#include <iostream>
#include <chrono>
#include <thread>
using namespace std::chrono_literals;
void state1() {
std::cout << "State 1" << std::endl;
}
void state2() {
std::cout << "State 2" << std::endl;
}
void state3() {
std::cout << "State 3" << std::endl;
}
int main() {
void (*states[])() = {state1, state2, state3}; // 函数指针数组,存储所有状态的函数指针
int current = 0; // 当前状态的下标
while (true) {
std::this_thread::sleep_for(1s); // 1秒后自动切换状态
current = (current + 1) % 3; // 切换到下一个状态
states[current](); // 调用当前状态的函数
}
return 0;
}
```
在这个程序中,我们定义了三个状态函数 `state1`、`state2` 和 `state3`,分别代表三个不同的状态。我们使用一个函数指针数组 `states` 存储了这三个状态函数的地址。在主函数中,我们使用一个循环不断地切换状态,并调用当前状态的函数。具体地,我们使用一个变量 `current` 存储当前状态的下标,然后每次循环将 `current` 加一,并通过取模运算得到下一个状态的下标。最后,我们通过 `states[current]()` 调用当前状态的函数。由于每次循环都会暂停 1 秒,所以状态之间的切换也会有 1 秒的时间间隔。
阅读全文