简介
program options
是一系列pair<name,value>
组成的选项列表,它允许程序通过命令行或配置文件来读取这些参数选项。
主要组件
program_options
的使用主要通过下面三个组件完成:
组件名 | 作用 |
---|---|
options_description(选项描述器) | 描述当前的程序定义了哪些选项 |
parse_command_line(选项分析器) | 解析由命令行输入的参数 |
variables_map(选项存储器) | 容器,用于存储解析后的选项 |
示例
本示例提供帮助(--help
)、日志存储文件(--log
)和配置文件(--config
)配置,未指定参数前缀时,第一个参数为--config
,第二个为--log
。
#include<iostream>
#include<boost/program_options.hpp>
using namespace std;
namespace po = boost::program_options;
int main(int argc, const char *argv[]) {
string config_file;
string log_file;
po::options_description desc("options"); // 选项描述器,其参数为该描述器的名字
// 为选项描述器增加选项
desc.add_options()
("help,h", "print help message")
("config,c", po::value<string>(&config_file)->default_value("config.json")->value_name("CONFIG"), "specify config file")
("log,l", po::value<string>(&log_file)->value_name("LOG"), "specify log file location");
// 添加位置选项
po::positional_options_description pd;
pd.add("config", 1);
pd.add("log", 2);
po::variables_map vm; // 选项存储器,继承自map容器
try {
// 对命令行输入参数进行解析,并存入选项存储器
po::store(po::command_line_parser(argc, argv).options(desc).positional(pd).run(), vm);
} catch(...) {
cerr << "There are undefined options in the parameters entered." << endl;
return 1;
}
// 参数解析完成后,通知variables_map去更新所有的外部变量
po::notify(vm);
// 检测某个值
if (vm.count("help")) {
cout << "usage: " << argv[0] << " [-h] [[-l] LOG] [[-c] CONFIG]" << endl;
cerr << desc;
exit(EXIT_SUCCESS);
}
if (vm.count("log")) {
cout << "log" << log_file << endl;
}
if (vm.count("config")) {
cout << "config: " << config_file << endl;
}
return 0;
}
这样,参数解析是不是变得很简单?boost
真是一个宝库,以后要多加利用。