当前位置: 首页 > news >正文

《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C#x2B;#x2B;命令行参数解析库

《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C++命令行参数解析库

前言

作者我本人经常会写一些命令行小工具,
此前一直使用node.js的三方库commander.js来解析命令行参数,
commander.js是一个非常方便的命令行参数解析库,
但是使用node.js也会有一些限制,比如:运行的电脑上需要安装node.js,并且在一些对性能要求比较高的场景就会不太方便了,
针对上述情况,我尝试切换到c++,但是在实际写代码时发现,现有的命令行解析库使用时没有commander.js那么丝滑,让我很难受,
于是,我决定仿照commander.js的设计,写一个c++的命令行参数解析库,取名为commander-cpp,头文件名为commander_cpp.hpp

仓库

仓库地址:https://github.com/DoYoungDo/commander-cpp

特性

  • 🎯 链式 API 设计,简洁易用
  • 📦 单头文件,无外部依赖
  • 🔧 支持选项(单值、多值、布尔值)
  • 📝 支持参数(必需参数、可选参数、多值参数)
  • 🌲 支持子命令和嵌套命令
  • ⚙️ 支持默认值
  • 📖 自动生成帮助信息
  • 🔍 详细的错误处理和日志系统
  • 🎨 支持选项别名和组合(如-abc

安装

commander_cpp.hpp文件复制到项目中,并在代码中包含它:

/* by 01130.hk - online tools website : 01130.hk/zh/html2cj.html */ #include "commander_cpp.hpp"

示例

示例代码
/* by 01130.hk - online tools website : 01130.hk/zh/html2cj.html */ #include "commander_cpp.hpp" using namespace COMMANDER_CPP; int main(int argc, char **argv) { // 构造一个Command对象,命令名为"example", 等价于:Command().name("example") Command("example") // 设置版本号 .version("1.0.0") // 添加一个简介描述文本 ->description("一个示例命令行应用") // 添加一个选项,选项名是'name',设置别名'n',并指定参数必选 ->option("-n --name <name>", "你的名字" /* 选项的描述 */) // 添加一个参数,参数名是'file',并指定参数可选 ->argument("[file]", "要处理的文件路径") // 添加一个动作回调,当命令行参数解析完成后调用 ->action([](Vector<Variant/* = std::variant<...> */> args /* 参数值列表 */, Map<String /* 选项名 */, Variant /* 选项值 */> opts /* 选项值列表 */) { if (opts.find("name") != opts.end()) { std::cout << "Hello, " << std::get<String>(opts["name"]) << "!" << std::endl; } else { std::cout << "Hello, World!" << std::endl; } }) // 解析命令行参数 ->parse(argc, argv); return 0; }
运行示例
$ ./example -n Alice Hello, Alice! $ ./example -V 1.0.0 $ ./example --help Usage: example [options] 一个示例命令行应用 Options: -V, --version out put version number. -n, --name <name> 你的名字 -h, --help

更多示例...

注意

  • 支持 C++17 或更高版本
做一条有理想的咸鱼
http://www.jsqmd.com/news/192791/

相关文章:

  • 【Linux命令大全】003.文档编辑之fold命令(实操篇)
  • 珞巴语弓箭狩猎:猎人数字人演示精准射击
  • 揭秘PHP对接图像识别API的5大坑:90%开发者都踩过的陷阱
  • 230+2026AI插件脚本大合集V7.0最新中文版本!
  • 揭秘PHP实现视频流实时转码:3种高性能方案对比与最佳实践
  • 【PHP容器化部署终极指南】:从零掌握Docker高效部署实战技巧
  • PHP调用图像识别接口全攻略(从入门到上线部署)
  • 远程部署HeyGem数字人系统?使用服务器IP访问的正确姿势
  • 揭秘PHP连接Redis集群的5大坑:你避开了吗?
  • 如何用HeyGem数字人系统批量生成高质量虚拟人视频?完整操作手册
  • 2025年12月台灯热销榜!这些品牌值得你拥有,智能台灯/台灯/教育照明/路灯/教室灯/课桌椅/落地灯,台灯公司排行榜 - 品牌推荐师
  • 毛南语肥套仪式驱邪:师公数字人做法祈福消灾
  • JavaScript在HeyGem中的作用:前端交互逻辑实现原理浅析
  • 使用MATLAB实现PID参数自动整定
  • ue 推送直播流
  • 2025口碑好的即食海参厂家TOP5权威推荐:有机即食海参+实力供应商双维度测评 - 工业推荐榜
  • MathType公式插入插件设想:HeyGem未来支持课件类数字人内容?
  • HeyGem系统安全性评估:上传文件是否会泄露隐私?
  • 为什么90%的PHP项目微服务化失败?服务注册是关键瓶颈!
  • 土库曼语地毯认证标准:质检员数字人说明出口要求
  • 2025年口碑好的即食海参生产厂家推荐,老牌诚信企业全解析 - 工业设备
  • Notion笔记转语音再转数字人视频?全自动内容生产流水线构想
  • HeyGem系统依赖哪些Python包?requirements.txt文件预估
  • 2025年度专注的集成电路设计加工厂排名:集成电路设计生产厂售后哪家好? - mypinpai
  • HTML+CSS构建界面?解析HeyGem WebUI的技术架构底层逻辑
  • 乌孜别克语花帽刺绣:绣娘数字人描绘民族图案
  • 【PHP视频流转码配置全攻略】:从零搭建高效流媒体服务的5大核心步骤
  • 珞巴族藤编工艺:编织者数字人制作背篓
  • 2025年安徽家政服务公司排行榜,安徽赛瑞斯详细介绍、竞争力与性价比测评 - 工业品网
  • HTTPS加密访问配置:为HeyGem系统添加安全层保护