Нужен парсер командной строки, чтобы соответствовать моим требованиям
Это вопрос синтаксического анализатора командной строки C/C++.
Я использовал парсеры командной строки, предоставленные в glib и Boost, но я нашел их неудовлетворительными. У меня есть два особых требования:
несколько значений после одного ключа, так что я могу использовать файл glob в командной строке следующим образом:
my_program --input dir/*.txt
настраиваемый тип значения, например:
typedef enum { FORMAT_A, FORMAT_B, FORMAT_C } InputFormat; InputFormat option_format;
Я хочу, чтобы мой пользователь мог указать формат в командной строке --format format_a
, Синтаксическому анализатору необходимо разрешить настраиваемой функции обратного вызова распознавать строковое значение и устанавливать значение перечисления.
Кажется, Boost поддерживает 1, но не 2. Он позволяет вам определять только дополнительный парсер, который пересекает токены один за другим, но не по парам KV. И glib поддерживает 2, но не 1. Это позволяет только несколько вызовов, как --input foo --input bar
,
Есть еще либы, которые поддерживают как 1, так и 2? Или какие-либо предложения по продвинутому использованию glib или boost для достижения как 1, так и 2?
1 ответ
Повышение может фактически удовлетворить требование 2. Вы должны будете создать своего собственного ребенка value_semantic
с соответствующим анализатором и передать экземпляр этого в add_options
вместо того, чтобы использовать типичный value<int>()
механизм.