您好,登錄后才能下訂單哦!
boost中program_options庫如何解析命令行參數以及讀取配置文件,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、命令行解析
tprogram_options解析命令行參數示例代碼:
#include <iostream> using namespace std; #include <boost/program_options.hpp> 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<int>(), "set compression level"); //("compression", po::value<int>(&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<<desc<<endl; return 1; } if(vm.count("compression")) { cout<<"compression level was set to "<<vm["compression"].as<int>()<<"."<<endl; //cout<<"compression level: "<<level<<endl; } else { cout<<"compression level was not set."<<endl; } return 0; }
運行結果:
輸入參數:--help
輸入參數:--compression
10
二、讀取配置文件(Linux、Windows均可)
2.1 代碼
#include <fstream> #include <map> using namespace std; #include <boost/program_options.hpp> 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" #endif std::pair<std::string, std::string> at_option_parser(std::string const& s) { if ('@' == s[0]) { return make_pair(std::string("config"), s.substr(1)); } else { return std::pair<std::string, std::string>(); } } 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<string>(&host_ip), "set db_host") ("host_port,P", po::value<short>(&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<string>(&server_ip), "set the http_server's ip. e.g. '202.106.0.20'") ("server_port,p", po::value<short>(&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<string>(&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 <<endl; cout << general << endl; cout << config << endl; return false; } if (vm.count("config")) { string conf_name = vm["config"].as<string>(); 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: "<<host_ip<<endl; cout<<"host_port: "<<host_port<<endl; cout<<"server_ip: "<<server_ip<<endl; cout<<"server_port: "<<server_port<<endl; return 0; }
2.2 配置文件
config.conf:
config2.conf:
2.3 輸出結果
看完上述內容,你們掌握boost中program_options庫如何解析命令行參數以及讀取配置文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。