【开源】《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C++命令行参数解析库
<h2 id="commander-cpp单头文件的链式调用的自动生成帮助文档的c命令行参数解析库">《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C++命令行参数解析库</h2><h3 id="前言">前言</h3>
<p>作者我本人经常会写一些命令行小工具,<br>
此前一直使用node.js的三方库commander.js来解析命令行参数,<br>
commander.js是一个非常方便的命令行参数解析库,<br>
但是使用node.js也会有一些限制,比如:运行的电脑上需要安装node.js,并且在一些对性能要求比较高的场景就会不太方便了,<br>
针对上述情况,我尝试切换到c++,但是在实际写代码时发现,现有的命令行解析库使用时没有commander.js那么丝滑,让我很难受,<br>
于是,我决定仿照commander.js的设计,写一个c++的命令行参数解析库,取名为<code>commander-cpp</code>,头文件名为<code>commander_cpp.hpp</code></p>
<h3 id="仓库">仓库</h3>
<p>仓库地址:https://github.com/DoYoungDo/commander-cpp</p>
<h3 id="特性">特性</h3>
<ul>
<li>🎯 链式 API 设计,简洁易用</li>
<li>📦 单头文件,无外部依赖</li>
<li>🔧 支持选项(单值、多值、布尔值)</li>
<li>📝 支持参数(必需参数、可选参数、多值参数)</li>
<li>🌲 支持子命令和嵌套命令</li>
<li>⚙️ 支持默认值</li>
<li>📖 自动生成帮助信息</li>
<li>🔍 详细的错误处理和日志系统</li>
<li>🎨 支持选项别名和组合(如 <code>-abc</code>)</li>
</ul>
<h3 id="安装">安装</h3>
<p>将 <code>commander_cpp.hpp</code> 文件复制到项目中,并在代码中包含它:</p>
<pre><code class="language-cpp">#include "commander_cpp.hpp"
</code></pre>
<h3 id="示例">示例</h3>
<h4 id="示例代码">示例代码</h4>
<pre><code class="language-cpp">#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("", "要处理的文件路径")
// 添加一个动作回调,当命令行参数解析完成后调用
->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;
}
</code></pre>
<h4 id="运行示例">运行示例</h4>
<pre><code class="language-bash">$ ./example -n Alice
Hello, Alice!
$ ./example -V
1.0.0
$ ./example --help
Usage: example
一个示例命令行应用
Options:
-V, --version out put version number.
-n, --name <name> 你的名字
-h, --help
</code></pre>
<p>更多示例...</p>
<h3 id="注意">注意</h3>
<ul>
<li>支持 C++17 或更高版本</li>
</ul>
</div>
<div id="MySignature" role="contentinfo">
做一条有理想的咸鱼<br><br>
来源:https://www.cnblogs.com/Doyoung/p/19437215
頁:
[1]