boost program_options: помощь против значимых опций - PullRequest
5 голосов
/ 15 ноября 2011

Есть ли простой способ отделить опцию помощи от «реальных» опций программы? На самом деле, возможно ли определить иерархию опций, например BNF:

options := help_options | program_options
help_options := '-h'
program_options := '-m1' mode1options | '-m2' mode2options
mode1options := number
...

Или есть лучший способ добиться этого? Должен ли я вернуться к духу?

1 Ответ

7 голосов
/ 15 ноября 2011

В документации описывается, как разделить параметры под заголовком Группы параметров и Скрытые параметры . Он демонстрирует определение нескольких options_description объектов и затем использование группы all для анализа командной строки, но группу visible для отображения документации:

// Declare an options description instance which will include
// all the options
options_description all("Allowed options");
all.add(general).add(gui).add(backend);

// Declare an options description instance which will be shown
// to the user
options_description visible("Allowed options");
visible.add(general).add(gui);

variables_map vm;
store(parse_command_line(ac, av, all), vm);

if (vm.count("help")) 
{
    cout << visible;
    return 0;
}

Хотя библиотека Program_options позволяет вам настраивать некоторые синтаксисы (см. Нетрадиционный синтаксис и Пользовательские валидаторы ), она не предлагает способ определения пользовательской грамматики. Если вы хотите определить грамматику командной строки, используйте другой инструмент.

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