这个可以转成读取配置文件导入到 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 存储,可以有效提高代码的可读性和可维护性。此外,使用配置文件也方便对映射关系进行修改和更新。

TuyaWorkStatus 映射表:将机器人工作状态转换为枚举类型

原文地址: https://www.cveoy.top/t/topic/orKw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录