标签: boost-program-options

boost :: program_options - 是否可以强制执行强制标志?

我在我的程序中使用boost :: program_options.我想强制要一个标志.是否可以使用program_options以一种它自己强制执行此操作的方式执行此操作?即,抛出错误信息?

c++ boost boost-program-options

20
推荐指数
1
解决办法
5071
查看次数

Boost程序选项允许输入值集

有没有办法为参数设置一组允许的输入变量?例如,参数"arg"只能包含像"cat"和"dog"这样的字符串值.

c++ boost-program-options

19
推荐指数
3
解决办法
1万
查看次数

如何使用boost程序选项获取默认参数值?

我想为我的一些命令行参数使用默认值.如何判断program_options默认选项是什么,如果用户没有提供参数,如何告诉我的程序使用默认值

假设我想要一个参数来指定在杀人狂暴中发送的机器人数量,默认值为3.

robotkill --robots 5会产生5 robots have begun the silicon revolution,而 robotkill(没有提供论据)会产生3 robots have begun the silicon revolution.

c++ boost boost-program-options

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

升级程序选项中的互斥选项集

我的计划(prog.exe)支持以下四个标志:-P,-p,-b-s.然而:

  • -b并且-p必须一起指定,构成一个集合,并具有数值,例如-b 42
  • -s 不能用上面的集合指定,反之亦然
  • -P 两种情况都是强制性的

因此,prog.exe只能作为两者运行

prog.exe -P -s 
Run Code Online (Sandbox Code Playgroud)

要么

prog.exe -P -b -42 -p 8
Run Code Online (Sandbox Code Playgroud)

有没有办法在boost程序选项中指定上述互斥命令行选项集?

c++ command-line-arguments boost-program-options command-line-parsing

18
推荐指数
1
解决办法
4168
查看次数

链接时找不到C++库,错误编译`boost :: program_options`示例

我正在尝试编译multiple_sources.cpp以在我的计算机上编译.我正在运行Xubuntu Lucid Lynx全面更新.

它将编译没有问题,g++ -c multiple_sources.cpp但当我尝试链接并使g++ multiple_sources.o我得到一个exectuable 得到:

multiple_sources.cpp:(.text+0x3d): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x87): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
multiple_sources.cpp:(.text+0x15a): undefined reference to `boost::program_options::options_description::add_options()'
multiple_sources.cpp:(.text+0x17b): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x193): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x1af): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
multiple_sources.cpp:(.text+0x1eb): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x252): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
...
Run Code Online (Sandbox Code Playgroud)

et cetera …

c++ boost boost-program-options

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

如何使用boost :: program_options接受可选标志?

我需要实现一个可选的标志,比如-f/ --flag.由于这是一个标志,因此没有关联的值.在我的代码中,我只需要知道标志是否已设置.使用boost :: program_options执行此操作的正确方法是什么?

c++ boost boost-program-options

17
推荐指数
2
解决办法
8816
查看次数

使用Boost的program_options处理复杂的选项

我有一个程序,使用不同的多级模型生成图形.每个多级模型由一代较小的种子图(例如,50个节点)组成,可以从多个模型创建(例如 - 对于每个可能的边,选择以概率p包括它).

在种子图生成之后,使用另一组模型之一将图扩展为更大的图(例如1000个节点).

在两个阶段的每个阶段中,每个模型需要不同数量的参数.

我想让program_options根据模型的名称解析不同的可能参数.

例如,假设我有两个种子图模型:SA,有1个参数,SB,有两个.同样对于扩展部分,我有两个模型:A和B,分别有1和2个参数.我希望能够做到这样的事情:

./graph_generator --seed=SA 0.1 --expansion=A 0.2
./graph_generator --seed=SB 0.1 3 --expansion=A 0.2
./graph_generator --seed=SA 0.1 --expansion=B 10 20
./graph_generator --seed=SB 0.1 3 --expansion=B 10 20
Run Code Online (Sandbox Code Playgroud)

并正确解析参数.这甚至可能吗?

c++ parameters boost graph boost-program-options

16
推荐指数
1
解决办法
6694
查看次数

使用' - '作为选项结束标记与boost :: program_options

指示命令行程序选项结束的传统方法是使用该选项--.如何让boost :: program_options将此识别为一个选项并接受命令行的其余部分作为位置参数?以下不起作用:

namespace po = boost::program_options;

po::positional_options_description posOpts;
posOpts.add("keywords", 1);
posOpts.add("input", 1);

std::vector<std::string> final_args;

po::options_description desc("Allowed Options");
desc.add_options()
  ...
  ("", po::value< std::vector<std::string> >(&final_args)->multitoken(), "end of options")
  ...
  ;

po::command_line_parser(argc, argv).options(desc).positional(posOpts).run();
Run Code Online (Sandbox Code Playgroud)

如果我foo bar作为参数给出,我什么都没有final_args(正如预期的那样),但是当我-- foo bar作为参数给出时(我期望找到final_args[0] == "foo"final_args[1] == "bar").我在这里假设这--是一个长参数,空字符串作为其参数名称.相反,如果它应该被解释为一个短参数,-作为参数名称,我该如何指定?从我可以看到,将参数规范从""to 更改为",-"不影响结果.

如何让boost :: program_options --正确处理?

编辑:这是尝试通过创建一个Tim Sylvester建议extra_style_parser:

std::vector<po::option> end_of_opts_parser(std::vector<std::string>& args) {
  std::vector<po::option> result;

  std::vector<std::string>::const_iterator i(args.begin());
  if (i …
Run Code Online (Sandbox Code Playgroud)

c++ boost-program-options

16
推荐指数
3
解决办法
2456
查看次数

使用boost :: program_options打印普通和位置参数的帮助

当您使用Boost库时program_options,可以非常轻松地为您的程序打印帮助:

boost::program_options::variables_map options;
boost::program_options::options_description optionsDesc;
boost::program_options::positional_options_description positionalOptionsDesc;
//...
if(options.count("help"))
{
    cerr << optionsDesc << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,如何将选项添加positional_options_description到帮助消息中?在本教程中,我可以在本节末尾看到这种设置的输出:

http://www.boost.org/doc/libs/1_52_0/doc/html/program_options/tutorial.html#id2607297

该选项input-file打印在帮助中,它是位置.但我看不到代码.是否有内置的方式来打印它,就像options_description你需要手动操作一样?显然这<<不起作用positional_options_description,编译错误是:

error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
Run Code Online (Sandbox Code Playgroud)

c++ boost command-line-arguments boost-program-options

16
推荐指数
1
解决办法
5789
查看次数

使用boost程序选项时如何解决"boost :: bad_any_cast:使用boost :: any_cast转换失败"?

//Using boost program options to read command line and config file data
    #include <boost/program_options.hpp>
    using namespace std;
    using namespace boost;
    namespace po = boost::program_options;

int main (int argc, char *argv[])
{
    po::options_description config("Configuration");
    config.add_options()
                ("IPAddress,i","IP Address")
                ("Port,p","Port")
                 ;

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

    cout << "Values\n";

    string address = (vm["IPAddress"].as<std::string >()).c_str();
    string port = (vm["Port"].as<std::string>()).c_str();

    cout << (vm["IPAddress"].as< string >()).c_str();
    cout << " " << (vm["Port"].as<string>()).c_str();

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

输入的值是否以某种方式无法打印?

这是gdb输出,似乎是转换问题:

在抛出'boost :: exception_detail :: clone_impl的实例后终止调用

'what():boost :: bad_any_cast:使用boost …

c++ boost types casting boost-program-options

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