千家信息网

boost中program_options库如何解析命令行参数以及读取配置文件

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,boost中program_options库如何解析命令行参数以及读取配置文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、命令行解
千家信息网最后更新 2025年01月23日boost中program_options库如何解析命令行参数以及读取配置文件

boost中program_options库如何解析命令行参数以及读取配置文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、命令行解析

tprogram_options解析命令行参数示例代码:

#include using namespace std;#include namespace po = boost::program_options;int main(int argc, char*argv[]){        //int level;        po::options_description desc("Allowed options");        desc.add_options()                ("help", "produce help message")                //("help,h", "produce help message")                ("compression", po::value(), "set compression level");                //("compression", po::value(&level)->default_value(1), "set compression level");        po::variables_map vm;        po::store(po::parse_command_line(argc, argv, desc), vm);        po::notify(vm);        if(vm.count("help"))        {                cout<()<<"."<

运行结果:

输入参数:--help


输入参数:--compression
10

二、读取配置文件(Linux、Windows均可)

2.1 代码

#include #include using namespace std;#include using namespace boost;namespace po = boost::program_options;#ifdef WIN32 #include "C:\Users\gwy8868\Desktop\fast_dr302\fast_dr302\global\xtokens.h"#else#include "/opt/guowenyan/fast_dr302/global/xtokens.h"#endifstd::pair at_option_parser(std::string const& s){        if ('@' == s[0])        {                return make_pair(std::string("config"), s.substr(1));        }        else        {                return std::pair();        }}int main(int argc, char*argv[]){        //        string host_ip;        short  host_port;        string server_ip;        short  server_port;        //        po::options_description hostoptions("host options");        hostoptions.add_options()                ("host_ip,H", po::value(&host_ip), "set db_host")                ("host_port,P", po::value(&host_port)->default_value(3306), "set db_port");        po::options_description general("general options");        general.add_options()                ("help,h", "produce help message")                ("server_ip,s", po::value(&server_ip), "set the http_server's ip. e.g. '202.106.0.20'")                ("server_port,p", po::value(&server_port)->default_value(80), "set the http_server's port. default:80");        string config_file;        po::options_description config("config options");        config.add_options()                ("config", po::value(&config_file)->default_value("config.conf"),                "set config file, specified with '@name' too");        po::options_description all("All options");        all.add(hostoptions).add(general).add(config);        po::variables_map vm;        po::store(po::command_line_parser(argc, argv).options(all).extra_parser(::at_option_parser).run(), vm);         if (vm.count("help"))        {                cout << hostoptions <();                ifstream ifs_config(conf_name.c_str());                if (! ifs_config)                {                        cerr << "could not open the configure file" << endl;                        return false;                }                stringstream ss_config;                ss_config << ifs_config.rdbuf();                global::strings_t args;                global::separate_tokens(ss_config.str(), args, " \r\n");                po::store(po::command_line_parser(args).options(all).run(), vm);        }        po::notify(vm);        //        cout<<"host_ip: "<

2.2 配置文件

config.conf:

config2.conf:

2.3 输出结果

看完上述内容,你们掌握boost中program_options库如何解析命令行参数以及读取配置文件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0