Boost.Program_options 固定数量的令牌

发布于 2024-08-24 05:23:50 字数 793 浏览 7 评论 0 原文

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.Program_options provides a facility to pass multiple tokens via command line arguments as follows:

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

However, what is the preferred way of accepting only a fixed number of arguments? The only solution I could come is to manually assign values:

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
}

This feels a bit clumsy. Is there a better solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森末i 2024-08-31 05:23:50

boost 库仅提供预定义的机制。快速搜索没有找到具有固定数量值的内容。但你可以自己创建这个。 po::value std::vector >(&nums)->multitoken() 只是一个专门的 value_semantic 类。正如您所看到的,此类提供了方法 min_tokensmax_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 methods min_tokens and max_tokens, which seems to do exactly what you want. If you look at the definition of class typed_value ( this is the object that gets created, when you call po::value< std::vector<int> >(&nums)->multitoken()) you can get the grasp of how the methods should be overridden.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文