TuyaWorkStatus 映射表:将机器人工作状态转换为枚举类型
这个可以转成读取配置文件导入到 map 么 是可以的,可以将这个映射表保存在一个配置文件中,然后在程序运行时读取该配置文件,将其导入到一个 std::map 中。具体实现可以使用 C++ STL 中的 fstream 和 stringstream 来读取和解析配置文件。读取文件时可以按行读取,然后使用 stringstream 将每行按照分隔符解析成键值对,最后将所有键值对插入到 std::map 中即可。
#include <fstream>
#include <sstream>
#include <map>
#include <string>
// 定义枚举类型
enum class TuyaWorkStatus {
standby,
smart,
cleaning,
part_clean,
select_room,
goto_charge,
paused,
charging,
charge_done,
in_trouble,
mapping,
collecting_dust,
self_clean,
sleep,
shutdown
};
// 读取配置文件并转换为 std::map
std::map<std::string, TuyaWorkStatus> load_work_status_map(const std::string& config_file) {
std::map<std::string, TuyaWorkStatus> work_status_map;
std::ifstream file(config_file);
if (file.is_open()) {
std::string line;
while (std::getline(file, line)) {
std::stringstream ss(line);
std::string key, value;
std::getline(ss, key, ',');
std::getline(ss, value, ',');
// 去除空格和引号
key.erase(key.begin(), std::find_if_not(key.begin(), key.end(), ::isspace));
key.erase(std::remove(key.begin(), key.end(), '''), key.end());
value.erase(value.begin(), std::find_if_not(value.begin(), value.end(), ::isspace));
value.erase(std::remove(value.begin(), value.end(), '''), value.end());
// 将字符串转换为枚举类型
TuyaWorkStatus status = static_cast<TuyaWorkStatus>(std::stoi(value));
work_status_map[key] = status;
}
file.close();
}
return work_status_map;
}
int main() {
// 加载配置文件
std::map<std::string, TuyaWorkStatus> work_status_map = load_work_status_map("work_status.txt");
// 使用映射表
std::string event_status = "EVENT_WORK_STATUS_IDLE";
TuyaWorkStatus status = work_status_map[event_status];
// 输出结果
std::cout << "事件状态: " << event_status << std::endl;
std::cout << "对应枚举类型: " << status << std::endl;
return 0;
}
配置文件 work_status.txt 内容如下:
'EVENT_WORK_STATUS_IDLE', TuyaWorkStatus::standby
'EVENT_WORK_STATUS_TOTAL_CLEAN', TuyaWorkStatus::smart
'EVENT_WORK_STATUS_AREA_CLEAN', TuyaWorkStatus::cleaning
'EVENT_WORK_STATUS_CURPOINT_CLEAN', TuyaWorkStatus::part_clean
'EVENT_WORK_STATUS_SEGMENT_CLEAN', TuyaWorkStatus::select_room
'EVENT_WORK_STATUS_BACK_CHARGE', TuyaWorkStatus::goto_charge
'EVENT_WORK_STATUS_BACK_CHARGE_PAUSE', TuyaWorkStatus::paused
'EVENT_WORK_STATUS_CHARGING', TuyaWorkStatus::charging
'EVENT_WORK_STATUS_FULL_CHARGING', TuyaWorkStatus::charge_done
'EVENT_WORK_STATUS_ERROR', TuyaWorkStatus::in_trouble
'EVENT_WORK_STATUS_REMOTE', TuyaWorkStatus::smart
'EVENT_WORK_STATUS_PAUSE', TuyaWorkStatus::paused
'EVENT_WORK_STATUS_DORMANT', TuyaWorkStatus::sleep
'EVENT_WORK_STATUS_SHUTDOWN', TuyaWorkStatus::shutdown
'EVENT_WORK_STATUS_BASE_STATION', TuyaWorkStatus::goto_charge
'EVENT_WORK_STATUS_BASE_STATION_PAUSE', TuyaWorkStatus::paused
'EVENT_WORK_STATUS_COLLECT_DUST', TuyaWorkStatus::collecting_dust
'EVENT_WORK_STATUS_WASH_MOP', TuyaWorkStatus::self_clean
'EVENT_WORK_STATUS_EXPLORE_MAP', TuyaWorkStatus::mapping
'EVENT_WORK_STATUS_EXPLORE_MAP_PAUSE', TuyaWorkStatus::paused
以上代码示例展示了如何将映射表保存到配置文件中,并在程序运行时读取配置文件并将其导入到 std::map 中。代码中使用了 fstream 和 stringstream 来读取和解析配置文件,并通过字符串转换为枚举类型来完成映射关系的建立。
此外,代码中还展示了如何使用 std::map 来访问映射表中的数据。通过指定事件状态,可以获取对应的 TuyaWorkStatus 枚举类型。
将映射表转换为配置文件并使用 std::map 存储,可以有效提高代码的可读性和可维护性。此外,使用配置文件也方便对映射关系进行修改和更新。
原文地址: https://www.cveoy.top/t/topic/orKw 著作权归作者所有。请勿转载和采集!