Russian Qt Forum

Программирование => С/C++ => Тема начата: kuzulis от Июнь 20, 2016, 13:36



Название: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: kuzulis от Июнь 20, 2016, 13:36
Всем привет.

Использую boost_program_options для парсинга параметров командной строки:

Код
C++ (Qt)
   ...
   ...
       boost::program_options::options_description general_desc("General options");
       general_desc.add_options()
               ...
               ...
               ;
   ...
   ...
       boost::program_options::options_description additional_desc("Additional options");
       additional_desc.add_options()
               ...
               ...
               ("list-commands", "Show available commands with their description.")
               ;
               ...
   ...
   ...
       boost::program_options::options_description desc;
       desc.add(general_desc);
       desc.add(additional_desc);
 
       boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
 
       if (vm.count("help")) {
           // do something
       } else if (vm.count("list-commands")) {
           // print available commands
       } else {
           //  do something
       }
 

где использую дополнительный параметр --list-commands для вывода на экран список неких команд.

Так вот, если писать неполную опцию, типа --list-c, --list-co - то оно интерпретируется как --list-commands  :o.. WTF?

Так должно быть, или это баг буста (1.61.0) ? Или фича или я что-то не так делаю?


Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: Bepec от Июнь 20, 2016, 15:13
Вроде бы фича. Если нет других совпадений "list-c", будет вызвано единственное.
Если же будет несколько, то ничего не запустит :)


Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: qate от Июнь 20, 2016, 15:40
а чем  boost_program_option  будет лучше QCoreApplication::arguments() ?


Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: kuzulis от Июнь 20, 2016, 16:18
Цитата: qate
а чем  boost_program_option  будет лучше QCoreApplication::arguments()

1. Тем что в бусте оно автоматом обрабатывается и проверяется на корректные значения и т.д. и.т.п.
2. QCoreApplication::arguments()  - это просто список аргументов.. может быть, имелось ввиду QCommandLineParser/Option ?
3. Я не использую Qt (это самое главное)  ;) Но если используется Qt - то QCommandLineParser/Option в самый раз.

Цитата: Bepec
Если же будет несколько, то ничего не запустит

Ну да, ругается что опция неизвестна... Ладно, будем считать фичей (мы доки не читаем, а сразу кодим :))


Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: qate от Июнь 20, 2016, 20:11
1.,2. я использую в своих поделках просто QCoreApplication::arguments(), пока хватает. QCommandLineParser мне видится пока излишним
3. неожиданно ), ведь qt лучше )



Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: kuzulis от Июнь 21, 2016, 08:47
Цитировать
3. неожиданно ), ведь qt лучше )

Бесспорно....  ;D но если речь идет о консольной утилитке, то тянуть Qt избыточно... Я ее слинковал с статическим рантаймом и она у меня ~500 KB... и я даже боюсь представить во скок это мне обошлось бы геморроя при использовании Qt..  :P


Название: Re: [boost_program_options] Переваривает неполные опции командной строки
Отправлено: qate от Июнь 21, 2016, 10:17
но если речь идет о консольной утилитке, то тянуть Qt избыточно...

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