c – Boost.Program_options固定的令牌数

Boost.Program_options提供了一个通过命令行参数传递多个标记的工具,如下所示:

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);

但是,接受固定数量的参数的首选方式是什么?我能找到的唯一解决方案是手动分配值:

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
}

这感觉有点笨拙.有更好的解决方案吗?

最佳答案 boost库仅提供预定义的机制.快速搜索没有找到具有固定数量值的内容.但你可以自己创造. po ::值 (& nums) – > multitoken()只是一个专门的
value_semantic类.正如您所看到的,这个类提供了方法min_tokens和max_tokens,它们似乎完全符合您的要求.如果你看一下类的typed_value的
definition(这是创建的对象,当你调用po :: value< std :: vector< int>>(& nums) – > multitoken())时,你可以得到掌握如何覆盖这些方法.

点赞