c++ - 需要一个命令行解析器来满足我的要求

标签 c++ command-line-arguments glib boost-program-options

这是一个关于 C/C++ 命令行解析器的问题。

我使用了 glibBoost 中提供的命令行解析器,但我发现它们并不令人满意。我有两个特殊要求:

  1. 一个键后有多个值,这样我就可以像这样在命令行上使用文件 glob:

    my_program --input dir/*.txt
    
  2. 自定义值类型,像这样:

    typedef enum { FORMAT_A, FORMAT_B, FORMAT_C } InputFormat;
    InputFormat option_format;
    

我希望我的用户可以在命令行 --format format_a 中指定格式。解析器需要允许自定义回调函数识别字符串值并设置枚举值。

boost 似乎支持1 但不支持2。它只允许您定义一个额外的解析器,一个一个地遍历 token ,而不是 KV 对。而glib 支持2 但不支持1。它只允许多次调用,如 --input foo --input bar

还有支持12 的库吗?或者关于高级使用 glibboost 以实现 12 的任何建议?

最佳答案

Boost 实际上可以处理要求 2。您需要创建自己的 value_semantic 子级使用适当的解析器并将其实例传递给 add_options而不是使用典型的 value<int>()机制。

关于c++ - 需要一个命令行解析器来满足我的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835369/

相关文章:

bash - 我怎样才能传递特殊字符[例如。 "or ( or ' ] 作为 shell 脚本的参数?

glib - g_main_loop_unref(GMainLoop* 循环) 如何工作?

c++ - 将 argv 转换回单个字符串

c++ - 使用C++制作泛型——共享实现的模板

c++ - 访问冲突。使用 GLEW 和 GLFW 时

cmake - 在 CMake 项目中包含 glib.h

c++ - 在 Qt 中禁用 Glib 事件循环 - QT_NO_GLIB 未生效

c++ - 方法返回基类而不是派生类 C++

java - 在 Java 中,有没有办法获取命令行参数,即使 main() 没有保存它们?

C:二进制命令行参数与二进制局部变量不同