Boost.program_options Número fixo de tokens
-
24-09-2019 - |
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?
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.