Я пишу систему в Qt, которая должна запускаться из GUI или из командной строки. Система должна выполнять различные операции, и каждая операция может иметь различные параметры, некоторые обязательные и некоторые необязательные.
Например, операция-1 принимает одну строку, операция-2 принимает две строки и операция-3 принимает одну строка и одно или два необязательных целых числа. Итак, следующие командные строки являются действительными:
operation-1 string
operation-2 string1 string2
operation-3 string
operation-3 string -val1 123
operation-3 string -val2 123
operation-3 string -val1 123 -val2 456
Как мне go сделать это с помощью QCommandLineParser
? Код, который я взял, по сути разбирает командную строку, чтобы получить первое слово, и вызывает одну из трех подпрограмм для обработки операции. Затем каждая из трех подпрограмм перестраивает таблицы синтаксического анализатора в соответствии с их заданным синтаксисом c. Это кажется мне уродливым, особенно потому, что есть некоторые другие флаги командной строки, которые можно использовать с одинаковым эффектом для каждой операции.
Это упрощенная система, иллюстрирующая мою проблему. Меня поражает, что вышеуказанную грамматику можно легко обработать, указав val1
и val2
в качестве параметров, а затем проверив в обработчиках, что ни одно из них не указано для operation-1
и operation-2
. Однако я чувствую, что хотел бы, чтобы парсер командной строки сделал это для меня. Я ожидаю слишком много от QCommandLineParser
или я что-то пропустил?