как мне получить токены без флагов и без опций после того, как boost::program_options анализирует мои аргументы командной строки

StackOverflow https://stackoverflow.com/questions/1314717

Вопрос

В Python я могу построить свой optparse экземпляр так, что он автоматически отфильтровывает параметры и не-опции/флаги в две разные группы:

(options, args) = parser.parse_args()

Как с помощью boost::program_options получить список токенов, которые являются оставшимися токенами без опций и без флагов?

напримерЕсли в моей программе есть флаги

--foo 
--bar BAR

и затем я передаю командную строку:

--foo hey --bar BAR you

как я могу получить список, состоящий исключительно из токенов «эй» и «ты»

Это было полезно?

Решение

IIRC, вам нужно использовать комбинацию positional_options_description и скрытые опции.Идея состоит в том, чтобы (1) добавить обычную опцию и дать ей имя, может быть, что-то вроде --positional=ARG, (2) не включайте эту опцию в описание справки, (3) настройте command_line_parser относиться ко всем позиционным аргументам так, как будто --positional был указан, и (4) получить позиционные аргументы, используя vm["positional"].as< std::vector<std::string> >().

Вероятно, где-то в дереве исходного кода есть пример, но сейчас его нет на этой машине.

Другие советы

Вот пример:

namespace po = boost::program_options;    
po::positional_options_description m_positional;
po::options_description m_cmdLine;
po::variables_map m_variables;

m_cmdLine.add_options()
    (/*stuff*/)
    ("input", po::value<vector<string> >()->composing(), "")
;
m_positional.add("input", -1);
po::parsed_options parsed = po::command_line_parser(argc, argv)
                        .options(m_cmdLine)
                        .positional(m_positional)
                        .allow_unregistered()
                        .run();
// store, notify, etc

Затем просто получите «входные» именованные параметры в виде вектора строк, и все готово.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top