# dl_config **Repository Path**: lveyou/dl_config ## Basic Information - **Project Name**: dl_config - **Description**: 配置生成C++代码工具 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-16 - **Last Updated**: 2025-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dl_config #### 介绍 配置生成C++代码工具 #### 使用说明 1.编辑原始配置 ``` { "name": "测试配置", "desc": "测试配置的描述", "type": "tagConfigTest", "value": { "子配置A": { "name": "基础类型配置", "desc": "整数配置示例", "type": "tagBase", "value": { "a": { "name": "整型变量", "desc": "这是一个整型变量", "type": "int", "value": 999 }, "b": { "name": "浮点变量", "desc": "这是一个浮点数变量", "type": "float", "value": 1.5 }, "c": { "name": "bool变量", "desc": "这是一个bool变量", "type": "bool", "value": true } } }, "子配置B": { "name": "容器类型配置", "desc": "容器配置示例", "type": "tagContainer", "value": { "aa": { "name": "字符串变量", "desc": "这是一个字符串变量", "type": "string", "value": "hello, world!" }, "bb": { "name": "vector变量", "desc": "这是一个vector变量", "type": "vector", "value": [1,3,5] }, "cc": { "name": "vector变量", "desc": "这是一个vector变量", "type": "vector", "value": ["字符串A", "字符串B", "字符串C"] }, "dd": { "name": "array变量", "desc": "这是一个array变量", "type": "array", "value": [11,22,33,44] } } } } } ``` 2.运行exe后,会生成两个文件,out.h、out.json,分别是对应的C++代码,读写用的json文件。 ``` /** * @file 输出代码.h * @brief 客户端自动生成配置代码 * * * @version 1.0 * @author lveyou * @date 24-12-11 * * @note 自动生成的配置代码 */ #pragma once #include #include #include #include #include using json = nlohmann::json; namespace Json { /** * @brief 从json返回值,不存在则返回false */ template bool AutoGet(const json& j, const std::string& name, T& t) { auto iter = j.find(name); if (iter == j.end()) { 打印日志函数(std::string("未加载到配置:") + name); return false; } try { json v = *iter; if (v.find("value") != v.end()) t = (v["value"]).get(); else t = v.get(); return true; } catch (nlohmann::detail::exception& e) { 打印日志函数(std::string("配置取值失败:") + name + " " + e.what()); } return false; } } //! 测试配置 -> 测试配置的描述 struct tagConfigTest { //! 基础类型配置 -> 整数配置示例 struct tagBase { int a = 999;//! 整型变量 -> 这是一个整型变量 float b = 1.5f;//! 浮点变量 -> 这是一个浮点数变量 bool c = true;//! bool变量 -> 这是一个bool变量 }子配置A; //! 容器类型配置 -> 容器配置示例 struct tagContainer { std::string aa = "hello, world!";//! 字符串变量 -> 这是一个字符串变量 std::array dd = { 11, 22, 33, 44 };//! array变量 -> 这是一个array变量 std::vector bb = { 1, 3, 5 };//! vector变量 -> 这是一个vector变量 std::vector cc = { "字符串A", "字符串B", "字符串C" };//! vector变量 -> 这是一个vector变量 }子配置B; bool Load(json& j_root) { { json j; Json::AutoGet(j_root, "子配置A", j); Json::AutoGet(j, "a", 子配置A.a); Json::AutoGet(j, "b", 子配置A.b); Json::AutoGet(j, "c", 子配置A.c); } { json j; Json::AutoGet(j_root, "子配置B", j); Json::AutoGet(j, "aa", 子配置B.aa); Json::AutoGet(j, "dd", 子配置B.dd); Json::AutoGet(j, "bb", 子配置B.bb); Json::AutoGet(j, "cc", 子配置B.cc); } return true; } json Save() { json j; { json& j_子配置A = j["子配置A"]; j_子配置A["a"] = 子配置A.a; j_子配置A["b"] = 子配置A.b; j_子配置A["c"] = 子配置A.c; } { json& j_子配置B = j["子配置B"]; j_子配置B["aa"] = 子配置B.aa; j_子配置B["dd"] = 子配置B.dd; j_子配置B["bb"] = 子配置B.bb; j_子配置B["cc"] = 子配置B.cc; } return j; } }; ``` 对应的json文件: ``` { "__desc": "测试配置的描述", "__name": "测试配置", "子配置A": { "__desc": "整数配置示例", "__name": "基础类型配置", "a": { "__desc": "这是一个整型变量", "__name": "整型变量", "type": "int", "value": 999 }, "b": { "__desc": "这是一个浮点数变量", "__name": "浮点变量", "type": "float", "value": 1.5 }, "c": { "__desc": "这是一个bool变量", "__name": "bool变量", "type": "bool", "value": true } }, "子配置B": { "__desc": "容器配置示例", "__name": "容器类型配置", "aa": { "__desc": "这是一个字符串变量", "__name": "字符串变量", "type": "string", "value": "hello, world!" }, "bb": { "__desc": "这是一个vector变量", "__name": "vector变量", "type": "vector", "value": [ 1, 3, 5 ] }, "cc": { "__desc": "这是一个vector变量", "__name": "vector变量", "type": "vector", "value": [ "字符串A", "字符串B", "字符串C" ] }, "dd": { "__desc": "这是一个array变量", "__name": "array变量", "type": "array", "value": [ 11.0, 22.0, 33.0, 44.0 ] } } } ``` 3.生成的设置修改config.json即可: ``` { "author":"lveyou", "filename":"输出代码.h", "log_function": "打印日志函数", "path_in": "原始配置.json", "path_out_code": "out.h", "path_out_json": "out.json", "type_replace":{ "uchar":"palette", "vector":"vector" } } ```