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
}
这感觉有点笨拙。有更好的解决方案吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
boost 库仅提供预定义的机制。快速搜索没有找到具有固定数量值的内容。但你可以自己创建这个。 po::value
std::vector >(&nums)->multitoken()
只是一个专门的 value_semantic 类。正如您所看到的,此类提供了方法min_tokens
和max_tokens
,这似乎正是您想要的。如果您查看类定义 >typed_value
( 这是当您调用po::value< std::vector >(&nums)->multitoken()< 时创建的对象/code>
)您可以了解如何重写这些方法。
The boost library only provides the predefined mechanisms. A quick search didn't find something with a fixed number of values. But you can create this yourself. The
po::value< std::vector<int> >(&nums)->multitoken()
is just a specialized value_semantic class. As you can see, this class offers the methodsmin_tokens
andmax_tokens
, which seems to do exactly what you want. If you look at the definition of classtyped_value
( this is the object that gets created, when you callpo::value< std::vector<int> >(&nums)->multitoken()
) you can get the grasp of how the methods should be overridden.