Используя boost program_options, выберите наборы опций на основе одного обязательного параметра 'mode' - PullRequest
2 голосов
/ 01 февраля 2011


Предположим, у меня есть несколько групп опций, называемых modeA modeB common.Я буду ссылаться на них в {} - т.е. {common} расширяется до любой опции, описанной в этой группе.

Я хотел бы иметь возможность применять следующие командные строки

command A {common} {modeA}
command B {common} {modeB}

Положение опций из режима и общих групп не имеет значения и может быть переплетено
Следующее не удастся

command A {modeB}    /* Wrong option group for this mode */
command A B          /* A and B not allowed */

Таким образом, цели

  • вариант, которыйдолжно происходить и быть одним из набора A | B
    • , если возможно, принудительно быть первым параметром
  • целых групп, анализируемых как Ok или игнорируемых на основе вышеуказанного обязательного параметра

Ответы [ 2 ]

0 голосов
/ 27 мая 2013

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

  1. сначала проанализировать "основные" опции, но позволяя нераспознанным вариантам
  2. определить режим
  3. сбор нераспознанных опций с помощью collect_unrecognized
  4. анализ нераспознанных опций по опциям режима, запрещающим нераспознанные (таким образом, выдает ошибку, если опции режима B используются в режиме A)
0 голосов
/ 04 февраля 2011

Не элегантное решение, но ...
Разделите параметры по крайней мере на три группы, параметры для режима A / modeB и другие. Другие содержат помощь и оптоны режима. Используйте пользовательский валидатор для режима, чтобы ограничить параметры (по умолчанию) Тогда

  • Объединить все группы и разобрать
  • Действие - помогите, если требуется (объясните все режимы / опции)
  • Режим определения
  • Создать новую групповую комбинацию, оставив ненужный режим, и выполнить повторный анализ

Я чувствую, что должен быть более приятный путь

...