2011-02-01 3 views
2


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

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

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 */ 

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

  • вариант, что должно произойти и быть одним из множества А | Б
    • , если это возможно вынужден быть первым параметром
  • целые группы разобрано как ОК или игнорируется на основании вышеуказанного обязательного параметра

ответ

0

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

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

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

0

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

  1. разобрать «ядро» варианты первой, но позволяет непризнанные варианты
  2. определяют режим
  3. собирать непризнанные варианты через collect_unrecognized
  4. разобрать непризнанные варианты в отношении вариантов режима запрещая непризнанные (таким образом, вызывая ошибку, если параметры режима B используются в режиме А)