Я разрабатываю обновление в существующей программе. Я заменяю getopt_long() в Posix с boost :: program_options. Но моя работа не работает, как я: Я хочу иметь читаемые аргументы, как:C++ boost :: program_options чтение аргументов, совместимых с getopt_long
-server=www.example.com
-c config.txt
Я пытался много возможностей от повышающего :: program_options :: command_line_style, но я не могу найти комбинации, которые бы дать поведение, равное getopt_long.
я узнал, что аргументы:
-server=www.example.com
мне нужен флаги:
command_line_style::allow_long_disguise | command_line_style::long_allow_adjacent
, но у меня есть проблемы с учредительными флагами для:
-c config.txt
Я обнаружил, что флаги:
command_line_style::allow_short | command_line_style::allow_dash_for_short | command_line_style::short_allow_next
дайте мне почти то, что я хочу. Почти потому что:
ProgramOptionsParserTest.cpp:107: Failure
Value of: params.config
Actual: " config.txt"
Expected: expectedParams.config
Which is: "config.txt"
поэтому после использования boost :: algorithm :: trim() он будет, как я хочу.
Так что мой вопрос: возможно ли обрабатывать такие аргументы, как -c config.txt с boost :: program_options, но без boost :: algorithm :: trim()?
EDIT Я заметил, что указанные выше флаги не работают с незарегистрированными аргументами. Я зарегистрированные опции:
programOptionsDescription.add_options()
("help,h", "display help message")
("config,c", value<std::string>(), "use configfile")
("server,s", value<std::string>(), "server")
("ipport,p", value<uint16_t>(), "server port");
, но когда я использую незарегистрированные варианты (да, у меня есть basic_command_line_parser :: allow_unregistered()):
-calibration=something
Я вижу:
the argument ('alibration=something') for option '-config' is invalid
Мои Вопрос после выпуска: как обрабатывать аргументы, работающие с getopt_long с boost :: program_options?
Я думаю, что этот ответ не связан. Вопрос явно направлен на анализ параметров программы (posix getopt() и т. Д.), – user23573