Reg*_*gel 15 c++ syntax boost-program-options optionparser config-files
我似乎无法从命令行中读取配置文件多音色选项.配置文件的语法是什么?
这是添加选项描述的方式:
//parser.cpp
- - -
po::options_description* generic;
generic=new po::options_description("Generic options");
generic->add_options()
("coordinate",po::value<std::vector<double> >()->multitoken(),"Coordinates (x,y)");
Run Code Online (Sandbox Code Playgroud)
之后我解析命令和配置文件.
在命令行'--coordinate 1 2'工作.但是,当我尝试配置文件时:
coordinate = 1,2
Run Code Online (Sandbox Code Playgroud)
要么
coordinate= 1 2
Run Code Online (Sandbox Code Playgroud)
它没有给出invalid_option_value异常.那么多语言选项的配置文件的语法究竟是什么?
您可以通过编写自定义验证器来实现您寻求的行为.此自定义验证器接受:
./progname --coordinate 1 2
./progname --coordinate "1 2"
#In config file:
coordinate= 1 2
Run Code Online (Sandbox Code Playgroud)
这是代码:
struct coordinate {
double x,y;
};
void validate(boost::any& v,
const vector<string>& values,
coordinate*, int) {
coordinate c;
vector<double> dvalues;
for(vector<string>::const_iterator it = values.begin();
it != values.end();
++it) {
stringstream ss(*it);
copy(istream_iterator<double>(ss), istream_iterator<double>(),
back_inserter(dvalues));
if(!ss.eof()) {
throw po::validation_error("Invalid coordinate specification");
}
}
if(dvalues.size() != 2) {
throw po::validation_error("Invalid coordinate specification");
}
c.x = dvalues[0];
c.y = dvalues[1];
v = c;
}
...
po::options_description config("Configuration");
config.add_options()
("coordinate",po::value<coordinate>()->multitoken(),"Coordinates (x,y)")
;
Run Code Online (Sandbox Code Playgroud)
参考文献: