Pergunta

Boost.program_options fornece uma instalação para passar vários tokens por meio de argumentos da linha de comando da seguinte forma:

std::vector<int> nums;    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", po::value< std::vector<int> >(&nums)->multitoken(), "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);

No entanto, qual é a maneira preferida de aceitar apenas um número fixo de argumentos? A única solução que eu poderia vir é atribuir manualmente valores:

int nums[2];    

po::options_description desc("Allowed options");
desc.add_options()
    ("help", "Produce help message.")
    ("nums", "Numbers.")
;

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);

if (vm.count("nums")) {
   // Assign nums
}

Isso parece um pouco desajeitado. Existe uma solução melhor?

Foi útil?

Solução

A biblioteca Boost fornece apenas os mecanismos predefinidos. Uma pesquisa rápida não encontrou algo com um número fixo de valores. Mas você pode criar isso sozinho. o po::value< std::vector<int> >(&nums)->multitoken() é apenas um especializado value_semantic classe. Como você pode ver, esta aula oferece os métodos min_tokens e max_tokens, o que parece fazer exatamente o que você deseja. Se você olhar para o definição de aula typed_value ( Este é o objeto que é criado, quando você liga po::value< std::vector<int> >(&nums)->multitoken()) Você pode entender como os métodos devem ser substituídos.

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