Boost.Program_options: передать параметры после '--' в другую программу

Я пишу приложение C++ A, которое в фоновом режиме вызывает другое приложение B. Некоторые параметры командной строки предназначены для приложения A, но некоторые следует перенаправить в приложение B. Разделение должно работать с двойным дефисом --.

Например:

./my_executable_A -a --long_b some_file -- -c --long_d

должен анализировать {"-a", "--long_b", "some_file"} в приложении A и пересылать {"-c", "--long_d"} в приложение B, когда оно вызывается A.

Я подумал, что может иметь смысл использовать boost::program_options для задачи, но не нашел такой функциональности. Это возможно?

Примечание. Вариант использования — файловая система libfuse, в которой некоторые параметры должны быть перенаправлены функции fuse_main().


person Heinzi    schedule 28.09.2015    source источник
comment
Некоторое время назад я возился с библиотекой параметров программы Boost, но я, кажется, помню, что там был флаг или что-то в этом роде, чтобы попросить библиотеку остановить синтаксический анализ при достижении "--" и оставить оставшиеся аргументы в argc/argv.   -  person Some programmer dude    schedule 28.09.2015
comment
Вы можете просмотреть этот тикет в системе отслеживания ошибок Boost: svn.boost.org/trac/ boost/ticket/6991 — также подумайте, хотите ли вы вообще изменить синтаксис командной строки или он полностью высечен на камне?   -  person John Zwinck    schedule 28.09.2015
comment
Если есть другой короткий синтаксис, я был бы готов переключиться на него. Преимущество этого в том, что он используется другими файловыми системами libfuse и поэтому известен. Тем не менее, они делают ручной разбор.   -  person Heinzi    schedule 28.09.2015


Ответы (3)


Там нет встроенной поддержки для этого. Я бы рекомендовал просто создать std::vector из всего массива argv, найти "--" и, если он найден, разрезать вектор и передать первую часть в program_options (которая также принимает std::vector), а вторую часть к вашей программе.

person Vladimir Prus    schedule 30.09.2015


Один из вариантов, который у вас есть, - это ввести их все в качестве аргументов, а после '-' сохранить эти аргументы в другом символе **, который отправляется в разветвленный процесс. Обратите внимание, что перед разветвлением вы хотели бы настроить выходы и входы так, чтобы они могли общаться друг с другом, в зависимости от того, что вы хотите, чтобы приложение B делало.

person CodyJae    schedule 28.09.2015