Аргумент командной строки не сохранен (используется boost) - PullRequest
0 голосов
/ 03 января 2019

Я хочу сохранить значение командной строки в переменной.Вот мой полный код:

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

int main(int argc, char *argv[]) {
  int nselect = 100;
  boost::program_options::options_description desc("Allowed options");
  desc.add_options()
        ("help,h", "print usage message")
        ("nselect,N", boost::program_options::value<int>(&nselect), "number to select");
  boost::program_options::variables_map vm;
  boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);

  if (vm.count("help")) {
      std::cout << desc << "\n";
      return 0;
  }
  std::cout<<"nselect = "<<nselect<<"\n";
  return(0);
}

Я компилирую его как g++ a.cpp -lboost_program_options, а затем запускаю:

$ ./a.out -N 5
nselect = 100

Почему он не сохраняет значение командной строки?

Разрешение :

Вызов notify(vm) автоматически сохраняет значение в переменной, указанной в переменной.Или можно сопоставить его из vm, как в ответе @ Matthieu-Brucher ниже.

1 Ответ

0 голосов
/ 03 января 2019

Я бы на самом деле сделал что-то другое, более идиоматическое для ProgramOptions:

namespace po = boost::program_options;

po::options_description desc("Options");
desc.add_options()
    ("help,h", "print usage message")
    ("nselect,N", po::value<int>()->default_value(100), "number to select");

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

int nselect = vm["nselect"].as<int>();

Я не вызывал notify в вашем коде, это может быть единственное, что нужно изменить, хотя вместо этого я выбрал бы идиоматический способ для удобочитаемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...