Нужен парсер командной строки, чтобы соответствовать моим требованиям

Это вопрос синтаксического анализатора командной строки C/C++.

Я использовал парсеры командной строки, предоставленные в glib и Boost, но я нашел их неудовлетворительными. У меня есть два особых требования:

  1. несколько значений после одного ключа, так что я могу использовать файл glob в командной строке следующим образом:

    my_program --input dir/*.txt
    
  2. настраиваемый тип значения, например:

    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>() механизм.

Другие вопросы по тегам