# cxxargs **Repository Path**: eehut/cxxargs ## Basic Information - **Project Name**: cxxargs - **Description**: 一个简单易用的C++命令行参数解析库。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-14 - **Last Updated**: 2026-02-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cxxargs 一个简单易用的C++命令行参数解析库。 ## 特性 - 🎯 **简单易用**: 提供简洁的API,快速集成到项目中 - 🔧 **灵活配置**: 支持无参数、单参数、多参数三种选项模式 - ✅ **参数验证**: 支持自定义参数检查函数 - 📝 **自动帮助**: 自动生成帮助信息 - 🎨 **类型转换**: 支持字符串、整数、浮点数等多种类型转换 - 📦 **单头文件**: 只需包含一个头文件即可使用 ## 快速开始 ### 基本用法 ```cpp #include #include // 定义选项ID枚举 enum class OptId { Help, Verbose, Output, Files }; int main(int argc, const char* argv[]) { // 创建解析器 cxxargs::Parser parser("myapp", "My Application", "1.0.0"); // 添加选项 parser.option(OptId::Help, "-h,--help", "Show help information") .option(OptId::Verbose, "-V,--verbose", "Enable verbose mode") .option(OptId::Output, "-o,--output file", "Output file name", "output.txt") .option(OptId::Files, "-f,--files file...", "Input files", {"file1.txt", "file2.txt"}) // 多默认值选项 .set_help(OptId::Help); // 解析参数 parser.parse(argc, argv); // 使用选项 if (parser.get(OptId::Verbose).as_bool()) { std::cout << "Verbose mode enabled" << std::endl; } std::cout << "Output file: " << parser.get(OptId::Output).as_string() << std::endl; auto files = parser.get(OptId::Files).as_string_list(); for (const auto& file : files) { std::cout << "File: " << file << std::endl; } return 0; } ``` ### 选项类型 #### 1. 无参数选项(No-args) 用于布尔标志,如 `-h`, `--help`: ```cpp parser.option(OptId::Help, "-h,--help", "Show help"); ``` 使用 `as_bool()` 或 `count()` 来检查是否设置。 #### 2. 单参数选项(Single-arg) 接受一个参数值,如 `-o output.txt`: ```cpp parser.option(OptId::Output, "-o,--output file", "Output file", "default.txt"); ``` 使用 `as_string()`, `as_integer()`, `as_number()` 获取值。 #### 3. 多参数选项(Multi-arg) 接受多个参数值,如 `-f file1.txt file2.txt`: ```cpp parser.option(OptId::Files, "-f,--files file...", "Input files"); ``` 使用 `as_string_list()` 获取所有值。 ### 参数验证 可以添加自定义验证函数: ```cpp cxxargs::OptionCheck port_check = [](const std::string &arg, std::string &msg) -> bool { try { int port = std::stoi(arg); if (port < 1 || port > 65535) { msg = "Port must be between 1 and 65535"; return false; } return true; } catch (...) { msg = "Port must be a valid number"; return false; } }; parser.option(OptId::Port, "-p,--port port", "Server port", "8080", port_check); ``` ### 获取未匹配的参数 ```cpp auto unmatched = parser.get_unmatched(); for (const auto& arg : unmatched) { std::cout << "Unmatched: " << arg << std::endl; } ``` ## 构建 ### 使用CMake ```bash mkdir build cd build cmake .. make ``` ### 运行测试 ```bash cd build ctest # 或直接运行 ./bin/test_cxxargs ``` ## API参考 ### Parser类 #### 构造函数 ```cpp Parser(const char *app_name, const char *app_description = "", const char *app_version = "") ``` #### 方法 - `option(opt_id, mark, desc, default_value = "", check_function = nullptr)`: 添加选项 - `set_help(opt_id)`: 设置帮助选项ID - `parse(argc, argv)`: 解析命令行参数 - `get(opt_id)`: 获取选项对象 - `count(opt_id)`: 获取选项出现次数 - `get_unmatched()`: 获取未匹配的参数列表 - `print_usage()`: 打印使用帮助 ### Option类 #### 转换方法 - `as_bool()`: 转换为布尔值 - `as_string()`: 转换为字符串 - `as_integer()`: 转换为整数 - `as_number()`: 转换为浮点数 - `as_string_list()`: 获取字符串列表 - `valid()`: 检查是否有值 ## 示例 查看 `test/test_cxxargs.cpp` 了解更多使用示例。 ## 许可证 Copyright (c) 2023 ## 作者 Liu Chuansen (179712066@qq.com)