标签: boost-program-options

使用Boost Library程序选项的必需参数和可选参数

我正在使用Boost程序选项库来解析命令行参数.

我有以下要求:

  1. 一旦提供"帮助",所有其他选项都是可选的;
  2. 一旦未提供"帮助",则需要所有其他选项.

我怎么处理这个?这是我的代码处理这个,我发现它非常多余,我认为必须有一个容易做的,对吧?

#include <boost/program_options.hpp>
#include <iostream>
#include <sstream>
namespace po = boost::program_options;

bool process_command_line(int argc, char** argv,
                          std::string& host,
                          std::string& port,
                          std::string& configDir)
{
    int iport;

    try
    {
        po::options_description desc("Program Usage", 1024, 512);
        desc.add_options()
          ("help",     "produce help message")
          ("host,h",   po::value<std::string>(&host),      "set the host server")
          ("port,p",   po::value<int>(&iport),             "set the server port")
          ("config,c", po::value<std::string>(&configDir), "set the config path")
        ;

        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc), vm);
        po::notify(vm);

        if (vm.count("help"))
        {
            std::cout << desc << "\n";
            return false;
        }

        // There …
Run Code Online (Sandbox Code Playgroud)

c++ boost optional boost-program-options required

73
推荐指数
3
解决办法
4万
查看次数

Boost程序选项中的矢量参数

我有两个相关的问题:

  1. 使用Boost程序选项允许传递一系列值的最简单方法是什么?我的目标是避免prog --opt 1 --opt 2 --opt 3prog --opt 1 2 3反而.

  2. 什么是有需要的选项最简单的方法正好两个数字,如prog --opt 137 42

(我不需要任何"免费"程序参数.)

c++ boost boost-program-options

45
推荐指数
2
解决办法
2万
查看次数

提升程序选项示例

在线程序选项的增强教程中:http://www.boost.org/doc/libs/1_39_0/doc/html/program_options/tutorial.html#id2891824

它说完整的代码示例可以在"BOOST_ROOT/libs/program_options/example"目录中找到.我无法弄清楚这是哪里.任何人都可以帮我找到这些例子吗?

c++ boost boost-program-options

27
推荐指数
2
解决办法
3万
查看次数

boost :: program_options中的default_value和implicit_value有什么区别?

这就是问题所在.为什么我会使用implicit_value而不是default_value,反之亦然?

谢谢!

boost boost-program-options

27
推荐指数
2
解决办法
5411
查看次数

boost-program-options:没有值的选项的通知程序

只有在具有value_semantic的情况下,才能将通知程序用于解析选项.给定通知程序自动处理无值选项的最佳方法是什么?

简单的方法是使用隐式赋值创建一个虚拟value_semantic,这样用户就可以传递没有值的选项.这导致明确提供值的可能性.如果提供了值,则可以添加运行时检查并抛出错误.

更新:但是,这在位置选项存在的情况下不起作用,因为位置选项的值可以遵循无值选项,将异常作为给定值给出它.

c++ boost-program-options

24
推荐指数
2
解决办法
1万
查看次数

如何使用Boost.Program_options实现子命令?

我想为我的程序实现子命令.我还需要为不同的子命令提供不同的参数选项.使用Boost.Program_options执行此操作的最佳方法是什么?

子命令用于svn,git和apt-get等程序.

例如,在GIT中,一些可用的子命令是:

git status  
git push  
git add  
git pull  
Run Code Online (Sandbox Code Playgroud)

我的问题与这个人的问题基本相同:http://boost.2283326.n4.nabble.com/subcommands-with-program-options-like-svn-command-td2585537.html

c++ boost-program-options

24
推荐指数
1
解决办法
5805
查看次数

使用boost :: program_options时,如何设置参数的名称?

使用时boost::program_options,如何设置参数名称boost::program_options::value<>()

#include <iostream>
#include <boost/program_options.hpp>

int main()
{
  boost::program_options::options_description desc;

  desc.add_options()
    ("width", boost::program_options::value<int>(),
     "Give width");

  std::cout << desc << std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码给出:

  --width arg           Give width
Run Code Online (Sandbox Code Playgroud)

我想要的是arg用更具描述性的名称替换名称NUM:

  --width NUM           Give width
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-program-options

22
推荐指数
3
解决办法
6281
查看次数

boost :: program_options:发现了未记录的"*"功能,现在需要写入地图的自定义验证器

我最近发现了一个未记录的功能boost::program_options,即它接受"*"作为一个特殊的通配符,允许声明一组具有相同前缀的选项,如下所示:

configOptions.add_options()
    ("item_*", value<int>(), "items");
Run Code Online (Sandbox Code Playgroud)

该声明担任预期和认可item_1,item_3等等,而拒绝未知选项.那么问题是,如何编写一个自定义验证函数,它将使用options键及其值填充映射,如下所示:

map<string, int> itemsMap;
options_description items("items options");
    items.add_options()
        ("item_*",value<map<string, int>>(&itemsMap)->multitoken(), "items")
    ;
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 如何从validate()函数中获取验证选项的密钥?

template <typename T> void validate(boost::any& v, const std::vector<std::string>& values, map<string, T> *, int)
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-program-options

22
推荐指数
1
解决办法
1079
查看次数

为Enum提升自定义验证器

我试图验证命令行输入到我已定义的枚举,但得到编译器错误.我使用Handle复杂选项和Boost的program_options作为例子.

namespace po = boost::program_options;

namespace Length
{

enum UnitType
{
    METER,
    INCH
};

}

void validate(boost::any& v, const std::vector<std::string>& values, Length::UnitType*, int)
{
    Length::UnitType unit;

    if (values.size() < 1)
    {   
        throw boost::program_options::validation_error("A unit must be specified");
    }   

    // make sure no previous assignment was made
    //po::validators::check_first_occurence(v); // tried this but compiler said it couldn't find it
    std::string input = values.at(0);
    //const std::string& input = po::validators::get_single_string(values); // tried this but compiler said it couldn't find it

    // I'm …
Run Code Online (Sandbox Code Playgroud)

c++ validation boost boost-program-options

21
推荐指数
1
解决办法
7090
查看次数

Boost程序选项添加选项语法

我正在编写一个使用Boost程序选项库的程序,我注意到以下语法在我看到之后一直困扰着我:

desc.add_options()
        ("help","produce help message")
        ( /* other flag, value, description pairs here */)
;
Run Code Online (Sandbox Code Playgroud)

我在标题中看到,operator()被覆盖了,但是我不确定它是如何允许它在语法上正确的.

其次,与多次调用add_options()相比,这种语法是否有任何优势(除了展示你可以像这样操作语法这一事实)?

c++ boost boost-program-options

21
推荐指数
2
解决办法
5494
查看次数