轻量级参数解析库-tiny_cmdline

💡 原文中文,约6800字,阅读约需17分钟。
📝

内容提要

这篇文章介绍了一个轻量级的命令行参数解析库tiny_cmdline,它的目标是简单易读和定制化。作者提供了一些接口示例,包括添加有值参数和无值参数,以及自定义解析函数和自定义函数。文章还介绍了实现细节,包括使用std::unordered_map存储参数信息和调用getopt_long解析参数。整体实现不复杂,适用于C++11。

🔎

延伸解读

适用场景与设计取舍

tiny_cmdline 明确仅面向 Linux 平台,以 getopt_long 为底层解析库,适配 C++11,且不考虑性能与安全性。这意味着它适合对轻量、易读和定制有要求的命令行工具,而不适合需要跨平台、高性能或严格安全校验的场景。作者将参数检查、结果保存等职责交给用户,降低了库的复杂度,但也要求使用者自行处理这些逻辑。

接口设计的灵活性与代价

库提供了有值参数、无值开关、自定义解析函数和自定义函数四种接口。其中自定义解析函数是最基础的接口,其他接口均可基于它实现。这种设计让用户能灵活处理复杂参数格式,但代价是需要自行实现类型转换特化(如 double、std::string),否则默认仅支持通过 stoll 转换的整数类型。对于常见类型,用户需额外编写代码。

实现机制与使用注意

内部使用 std::unordered_map 存储参数信息,键根据 getopt_long 规则生成,支持仅长选项或仅短选项。添加重复选项时会向 stderr 输出错误。解析在 parse 中调用 getopt_long 完成。帮助信息可自动生成,但 -h/--help 被内定,用户可通过覆盖该选项来自定义帮助。注意,参数解析仅做解析,不进行范围检查等验证。

❓

Q&A

tiny_cmdline库的主要特点是什么?

tiny_cmdline库旨在提供简单易读和定制化的命令行参数解析,适配C++11,仅考虑Linux平台。

如何在tiny_cmdline中添加有值参数?

可以使用cmdline.add_argument()方法,传入参数名称、短选项、用户容器和描述来添加有值参数。

tiny_cmdline支持哪些类型的参数解析?

tiny_cmdline支持有值参数、无值参数和自定义解析函数的参数解析。

tiny_cmdline如何生成帮助信息?

tiny_cmdline可以根据用户提供的描述生成帮助信息,用户也可以自定义帮助信息。

tiny_cmdline的实现复杂吗?

整体实现不复杂,主要精力在接口设计上,代码量不到200行,便于阅读和理解。

tiny_cmdline库的底层解析库是什么?

tiny_cmdline使用getopt_long作为底层参数解析库。

➡️

继续阅读