como faço para obter os não-bandeira e não-opção fichas após o boost :: program_options analisa meus argumentos de linha de comando

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

Pergunta

Em python, eu posso construir a minha optparse exemplo de tal forma que ele será automaticamente filtro as opções e não-opção / bandeiras em dois baldes diferentes:

(options, args) = parser.parse_args()

Com boost :: program_options, como faço para recuperar uma lista de fichas que são os remanescentes não-opção e não-bandeira fichas?

por exemplo. Se o meu programa tem bandeiras

--foo 
--bar BAR

e eu, em seguida, passar na linha de comando:

--foo hey --bar BAR you

Como posso obter uma lista composta unicamente de tokens "hey" e "você"

Foi útil?

Solução

IIRC, você tem que usar uma combinação de positional_options_description e opções escondidas . A ideia é (1) adicionar uma opção normal e dar-lhe um nome, talvez algo como --positional=ARG, (2) não incluem essa opção na descrição de ajuda, (3) configure command_line_parser para tratar todos os argumentos posicionais como se --positional foi especificada, e (4) recuperar os argumentos posicionais usando vm["positional"].as< std::vector<std::string> >().

Há provavelmente um exemplo em algum lugar na árvore de origem, mas eu não tê-lo nesta máquina agora.

Outras dicas

Aqui está um exemplo:

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

Em seguida, é só pegar "input" opções nomeadas como vetor de strings e está tudo pronto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top