klo*_*ffy 5 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);
Run Code Online (Sandbox Code Playgroud)
但是,只接受固定数量参数的首选方式是什么?我能来的唯一解决方案是手动分配值:
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
}
Run Code Online (Sandbox Code Playgroud)
这感觉有点笨拙。有更好的解决方案吗?
boost 库仅提供预定义的机制。快速搜索没有找到具有固定数量值的内容。但你可以自己创建这个。这po::value< std::vector<int> >(&nums)->multitoken()只是一个专门的value_semantic类。正如您所看到的,此类提供了方法min_tokens和max_tokens,它似乎完全符合您的要求。如果您查看类的定义typed_value(这是调用时创建的对象po::value< std::vector<int> >(&nums)->multitoken()),您可以掌握如何重写方法。