获取在标记Boost Program Options之后给出的所有参数

时间:2018-07-13 15:37:58

标签: c++ boost command-line-interface

我试图在某个标志之后获取命令行中给定的所有输入,看来boost在空格后定界,并且我试图为给定命令获取多个数据。 / p>

例如,给定命令./Program -n Name -t Type -a key=value key=value key=value

名称和类型将被正确存储,但是一系列key = values不会被存储,仅第一个将被存储,而我想存储所有这些。我希望将key=value存储在该字符串中,而不是仅仅得到key=value key=value key=value的字符串结果。

有没有一种已知的方法可以允许boost存储不受空格限制的字符串。我无法发布确切的代码,但看起来与此示例非常相似:

#include <boost/program_options.hpp>
#include <iostream>

using namespace boost::program_options;

void on_age(int age)
{
  std::cout << "On age: " << age << '\n';
}

int main(int argc, const char *argv[])
{
  try
  {
    options_description desc{"Options"};
    desc.add_options()
      ("help,h", "Help screen")
      ("name,n", value<string>(), "name")
      ("type,t", value<string>(), "type")
      ("args,a", value<string>(), "args");

    variables_map vm;
    store(parse_command_line(argc, argv, desc), vm);
    notify(vm);

    if (vm.count("help"))
      std::cout << desc << '\n';
    if (vm.count("name"))
      std::cout << "Name: " << vm["name"].as<string>() << '\n';
    if (vm.count("type"))
      std::cout << "Type: " << vm["type"].as<string>() << '\n';
    if (vm.count("args"))
      std::cout << "Args: " << vm["args"].as<string>() << '\n';

  }
  catch (const error &ex)
  {
    std::cerr << ex.what() << '\n';
  }
}

我可以对代码进行哪些修改,以允许程序选项存储到下一个标志或输入结束为止。通常,这也是最后一个被调用的标志。

0 个答案:

没有答案