Справка по печати для нормальных и позиционных аргументов с boost:: program_options - программирование
Подтвердить что ты не робот

Справка по печати для нормальных и позиционных аргументов с 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>&&’
4b9b3361

Ответ 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