Получить много параметров из одного флага C ++ - PullRequest
0 голосов
/ 03 мая 2018

Я ищу библиотеку или "элегантный" способ анализа аргументов в моей программе, который не следует обычным шаблонам аргументов.

Обычно аргументами могут быть флаги (например, -a), параметры (-a value) или позиционные параметры, как видно здесь .

Что если моя программа принимает такие параметры, как -a v1 v2 v3, где v1, v2 и v3 напрямую связаны с -a и не являются позиционными параметрами как таковыми.

Далее, в моей программе (которая принимает эти параметры вручную) я даже могу получить -a v1 v2 v3 -b x1 x2 x3, где -b также относится к -a и не имеет смысла вне его.

Как и в -cat fluffy brown friendly -name snuffles

Там, где сопли имеют смысл только для данной кошки (это просто глупый пример).

1 Ответ

0 голосов
/ 03 мая 2018

Решение этой неприятной проблемы - прекратить это делать. Хорошим базовым руководством является Стандарты кодирования GNU для интерфейсов командной строки .

Обратите внимание, что Bash или другие оболочки могут помочь вам добиться компактного синтаксиса, не делая странных вещей в программном коде. Например, вместо myprog -a v1 v2 v3, сделайте это в Bash, и ваша программа увидит полный и правильный -av1 -av2 -av3 после расширения оболочки:

myprog -a{v1,v2,v3}
myprog -av{1..3}

Делая это таким образом, любая приличная библиотека для разбора аргументов CLI будет работать, и вам не нужно будет обходить бесконечные угловые случаи.

Что касается случая -a -b, где -b должен быть аргументом для -a, проблема исчезнет, ​​как только вы поставите перед ней -a:

myprog -a{v1,v2,v3,-b,x1,x2,x3}
...