【问题标题】:Boost.Program_options fixed number of tokensBoost.Program_options 固定数量的令牌
【发布时间】:2010-03-05 19:49:07
【问题描述】:

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
}

这感觉有点笨拙。有没有更好的解决方案?

【问题讨论】:

    标签: c++ boost-program-options


    【解决方案1】:

    boost 库只提供预定义的机制。快速搜索没有找到具有固定数量值的东西。但是您可以自己创建它。 po::value&lt; std::vector&lt;int&gt; &gt;(&amp;nums)-&gt;multitoken() 只是一个专门的 value_semantic 类。如您所见,该类提供了min_tokensmax_tokens 方法,这似乎完全符合您的要求。如果您查看typed_value 类的definition这是被创建的对象,当您调用po::value&lt; std::vector&lt;int&gt; &gt;(&amp;nums)-&gt;multitoken())您可以掌握应该如何覆盖这些方法。

    【讨论】:

    • 我确实看到了 min_tokensmax_tokens,但我不确定它们的用途。感谢您指出 typed_value 类。似乎这是要走的路,尽管它并不像我希望的那么容易。
    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多