Справка по печати для нормальных и позиционных аргументов с boost:: program_options
Когда вы используете библиотеку Boost program_options
, очень легко распечатать справку для вашей программы:
boost::program_options::variables_map options;
boost::program_options::options_description optionsDesc;
boost::program_options::positional_options_description positionalOptionsDesc;
//...
if(options.count("help"))
{
cerr << optionsDesc << endl;
}
Но как вы добавляете параметры из positional_options_description
в справочное сообщение? В учебном пособии я могу увидеть вывод такой настройки в конце раздела:
http://www.boost.org/doc/libs/1_52_0/doc/html/program_options/tutorial.html#id2607297
Опция input-file
печатается в справке и является позиционной. Но я не вижу код.
Есть ли встроенный способ печати, например, с помощью options_description
или вам нужно сделать это вручную? По-видимому, <<
не работает для positional_options_description
, ошибка компиляции:
error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
Ответы
Ответ 1
Обратите внимание, что описание потоковой передачи только распечатывает параметры. Он не печатает имя программы или фактическое описание того, что делает программа. Вы должны вручную напечатать любой позиционный параметр, который у вас есть как часть выходного сообщения:
Вместо
if (vm.count("help")) {
cout << "Usage: options_description [options]\n";
cout << desc;
return 0;
}
Вы можете легко сказать
if (vm.count("help")) {
cout << "Usage: " << argv[0] << " [options] <description of positional 1> <description of positional 2> ...\n";
cout << desc;
return 0;
}
Ответ 2
Посмотрите на boost:: program_options:: positional_options_description.name_for_position (i)
Сообщение об ошибке является чем-то несвязанным, я забываю, что что-то делать с cpp11