平时用C++写一些命令行工具,需要解析命令行的输入参数,这是一项繁琐并且容易出错的工作,我们不应该将主要精力放在这上面,可以考虑使用开源的库,下面的cmdline就是其中非常好用的一款。
cmdline介绍
cmdline 是一个非常简单好用的C++命令行解析库,其基于模板,所以使用很简单,写出的代码也很优雅。由于其只包含一个头文件,所以很容易集成到自己的项目中。
cmdline项目托管地址Github:https://github.com/tanakh/cmdline
cmdline使用
下面是cmdline项目首页给出的示例代码,我将其中的注释翻译成了中文,同时添加了一些自己使用经验和理解。
#include "cmdline.h"
int main(int argc, char *argv[])
{
// 创建一个命令行解析器
cmdline::parser a;
// 添加指定类型的输入参数
// 第一个参数:长名称
// 第二个参数:短名称('\0'表示没有短名称)
// 第三个参数:参数描述
// 第四个参数:bool值,表示该参数是否必须存在(可选,默认值是false)
// 第五个参数:参数的默认值(可选,当第四个参数为false时该参数有效)
a.add<string>("host", 'h', "host name", true, "");
// 第六个参数用来对参数添加额外的限制
// 这里端口号被限制为必须是1到65535区间的值,通过cmdline::range(1, 65535)进行限制
a.add<int>("port", 'p', "port number", false, 80, cmdline::range(1, 65535));
// cmdline::oneof() 可以用来限制参数的可选值