首页 > 解决方案 > 使用 optionparser.h 解析带有可选参数的 C++ 命令行参数

问题描述

optionparser.h(Lean Mean C++ Option Parser)文件中的所有示例看起来都没有使用任何选项参数。我欣然承认我不是一个出色的 C++ 程序员。我只是想要一些带有数字参数的选项。类似于 [--help --count_to 5 --jump 3 --noecho]。

这是该文件中有关使用情况的剪辑:

    enum  optionIndex { UNKNOWN, HELP, PLUS, SKIP1, SKIP2};
    const option::Descriptor usage[] =
    {
     {UNKNOWN, 0, "", "",option::Arg::None, "USAGE: MyPgm [options]\n\n" "Options:" },
     {HELP, 0,"h", "help",option::Arg::None, "  --help -h \tPrint usage and exit." },
     {PLUS, 0,"p","plus",option::Arg::None, "  --plus, -p  \tIncrement count." },
     {SKIP1, 0,"","nodcs",option::Arg::None, "  --nodcs, \tMy Option1" },
     {SKIP2, 0,"","noacs",option::Arg::None, "  --noacs, \tMy Option2" },
     };

  int main(int argc, char* argv[])
  {
    argc-=(argc>0); argv+=(argc>0); // skip program name argv[0] if present
    option::Stats  stats(usage, argc, argv);
    option::Option options[stats.options_max], buffer[stats.buffer_max];
    option::Parser parse(usage, argc, argv, options, buffer);
 
    if (parse.error())
      return 1;
 
    if (options[HELP] || argc == 0) {
      option::printUsage(std::cout, usage);
      return 0;
    }
 
    std::cout << "--plus count: " <<
      options[PLUS].count() << "\n";
 
    for (option::Option* opt = options[UNKNOWN]; opt; opt = opt->next())
      std::cout << "Unknown option: " << opt->name << "\n";
 
    for (int i = 0; i < parse.nonOptionsCount(); ++i)
      std::cout << "Non-option #" << i << ": " << parse.nonOption(i) << "\n";
  }

我看到 option::Arg 可以是 NONE 或 Optional,但我不知道如何引用可选参数。我也确信这段代码可以做的比我现在要求的要多得多。

标签: c++

解决方案


推荐阅读