Я использую повышение:: program_options как это:
namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
("help,?", "Show Options")
("capture-file,I", po::value<string>(), "Capture File")
("capture-format,F", po::value<string>()->default_value("pcap"), "Capture File Format")
("output-file,O", po::value<string>()->default_value("CONOUT$"), "Output File");
po::variables_map vm;
po::store(po::command_line_parser(ac, av).options(desc)./*positional(pd).*/run(), vm);
Если я передаю параметр командной строки -I hithere
это работает, но это я передаю /I hithere
повысьте бросает a boost::bad_any_cast
с a what()
из "неудавшегося преобразования с помощью повышения:: any_cast".
Действительно ли возможно использовать program_options для парсинга также /
- разграниченный или -
- разграниченные опции? Вопрос о премии, может это быть настроенным так, чтобы /
и -
установите ту же опцию, но двоичные противоположности друг друга? Например, /verbose
мог бы означать подробный вход в то время как -verbose
мог бы означать меньше подробного входа.
Чтобы использовать /
и -
, используйте command_line_parser
метод style ()
с соответствующей комбинацией style_t флаги. Например:
po::store(po::command_line_parser(ac, av)
.options(desc)
.style(po::command_line_style::default_style
| po::command_line_style::case_insensitive
| po::command_line_style::allow_slash_for_short
| po::command_line_style::allow_long_disguise)
/*.positional(pd)*/
.run(), vm);
( allow_long_disguise
позволяет /
запускать длинный вариант.)
Вероятно, вы могли бы сделать /
и -
противоположны путем добавления собственного дополнительного парсера ; однако это было бы очень нестандартно и, следовательно, могло бы сбить с толку конечных пользователей, поэтому я не уверен, что это хорошая идея.