我的代码不起作用:
wstring config_file;
// Declare a group of options that will be
// allowed only on command line
po::options_description generic("Generic options");
generic.add_options()
("help,h", "produce help message")
("config,c", po::wvalue<wstring>(&config_file)->default_value(L"DXDrv.cfg"), "name of a file of a configuration.")
;
Run Code Online (Sandbox Code Playgroud)
编译失败,错误:
d:\ repo\a4x_ext\minidxdriver\testapp\configparser\boost\lexical_cast.hpp(1096):错误C2039 ::
'setg'不是'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>'
我有以下玩具程序,它在OSX 10.6上给出了MacPorts gcc的错误
#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include <iostream>
using namespace std;
int main(int ac, char* av[])
{
po::options_description desc("Allowed options");
desc.add_options() ("help", "produce help message") ;
po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);
if (vm.count("help")) {
cout << desc << "\n";
return 0;
}
cout << "Program continues\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在MacPorts上安装了1.52版.我编译程序为
g++ a.cpp -lboost_program_options-mt -L/opt/local/lib -g -O0
Run Code Online (Sandbox Code Playgroud)
编译好:
$ ./a.out
Program continues
Run Code Online (Sandbox Code Playgroud)
但它无法打印帮助信息:
$ ./a.out --help
Allowed options:
a.out(40110) malloc: *** error for object 0x7fff70ca3500: pointer …Run Code Online (Sandbox Code Playgroud) 在boost::program_options库中,我无法理解如何允许用户传递尚未添加的参数add_options().
我希望它被忽略,而不是终止程序.
我想创建一个位置,列表程序选项,boost_program_options不允许命名程序选项(如--files).
我有以下代码片段:
#include <boost/program_options.hpp>
#include <iostream>
#include <string>
#include <vector>
namespace po = boost::program_options;
int main(int argc, const char* argv[]) {
po::options_description desc("Allowed options");
desc.add_options()("help", "produce help message")
( "files", po::value<std::vector<std::string>>()->required(), "list of files");
po::positional_options_description pos;
pos.add("files", -1);
po::variables_map vm;
try {
po::store(po::command_line_parser(argc, argv).options(desc).positional(pos).run(), vm);
po::notify(vm);
} catch(const po::error& e) {
std::cerr << "Couldn't parse command line arguments properly:\n";
std::cerr << e.what() << '\n' << '\n';
std::cerr << desc << '\n';
return 1;
}
if(vm.count("help") || …Run Code Online (Sandbox Code Playgroud) 当下面的呼叫失败时,有没有办法知道涉及哪个密钥?
boost::program_options::variables_map vm;
...
int foo_bar = vm["some_key"].as<int>();
Run Code Online (Sandbox Code Playgroud)
如果地图中缺少密钥,或者无法转换为int,我会得到一个相当无法提供信息的bad_any_cast,我无法知道以下任何内容:
我找不到任何解决方案,不涉及修改boost标头或在try..catch块中包装对上面的每个调用.我认为这是一个常见的问题,所以也许其他人知道更好的方法.
我使用程序选项来解析我的应用程序的命令行选项.
我有几个选项,如-Ox,-Oy,-Oz,......我希望有一个超级选项-Oall,它可以启用Ox和Oy以及另一个启用Oz和Ow的-Osub.
有没有办法使用Boost程序选项?
首先,我想检查Oall的值,然后手动启用Ox和Oy,但是在解析之后无法编辑值.
我想避免使用变量来存储Ox,Oy的值,因为我可以有很多这些选项.
谢谢
有没有一种简单的方法来检查选项的参数是否在一组预定义的选择中?这里的"简单"意味着没有定义ad-hoc类.
假设我有选项--myoption必须有价值"myvalue1"或"myvalue2"
例如,在python中,optparse中的选项选项非常简单
我正在尝试使用boost :: program_options来读取包含多个部分的ini文件:
[slave]
address=localhost
port=1111
[slave]
address=192.168.0.1
port=2222
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?
提前致谢!
我想在我的程序中实现类似命令行的接口.所以我收到的字符串遵循正常的命令行语法(例如"-G foo -dp bar --help").由于我不想再次实现解析器,我想使用Boost.
问题是:如何将字符串传递给Boost程序选项而不是argCount和argValues的组合.我是否需要先将文本转换为数字(argCount)和char*数组(argValues)才能完成?如果是的话...有一个简单的方法吗?
提前致谢.
boost::program_options当允许多音和位置选项时,如何解析或管理输入?
例如:
./app.sample pos1 --multitokenoption a b c d pos2
Run Code Online (Sandbox Code Playgroud)
当multitokenoption完成和位置选项何时开始时,助推器如何知道?
显然,最合乎逻辑的允许行为是多声道选项必须作为最后一个参数出现,就像函数参数中的默认参数一样,但是文档没有说明它.