技术型健身爱好者 發表於 2026-1-4 12:44:00

【开源】《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")
      // 添加一个简介描述文本
      -&gt;description("一个示例命令行应用")
      // 添加一个选项,选项名是'name',设置别名'n',并指定参数必选
      -&gt;option("-n --name &lt;name&gt;", "你的名字" /* 选项的描述 */)
      // 添加一个参数,参数名是'file',并指定参数可选
      -&gt;argument("", "要处理的文件路径")
      // 添加一个动作回调,当命令行参数解析完成后调用
      -&gt;action([](Vector&lt;Variant/* = std::variant&lt;...&gt; */&gt; args /* 参数值列表 */, Map&lt;String /* 选项名 */, Variant /* 选项值 */&gt; opts /* 选项值列表 */) {
            if (opts.find("name") != opts.end()) {
                std::cout &lt;&lt; "Hello, " &lt;&lt; std::get&lt;String&gt;(opts["name"]) &lt;&lt; "!" &lt;&lt; std::endl;
            } else {
                std::cout &lt;&lt; "Hello, World!" &lt;&lt; std::endl;
            }
      })
      // 解析命令行参数
      -&gt;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 &lt;name&gt;   你的名字
-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]
查看完整版本: 【开源】《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C++命令行参数解析库