• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            zhujian

            揣著夢想騎驢找馬但不虐待驢
            posts - 10, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Boost program_options(續)

            Posted on 2011-01-13 13:17 逐漸 閱讀(549) 評論(0)  編輯 收藏 引用
            下面介紹如何從配置文件中讀參數,配置文件中采用name = value的形式,#行表示注釋.
             1 #include <boost/program_options.hpp>
             2 
             3 #include <vector>
             4 #include <iostream>
             5 #include <string>
             6 #include <algorithm>
             7 #include <iterator>
             8 #include <fstream>
             9 using std::copy;
            10 using std::vector;
            11 using std::string;
            12 using std::cout;
            13 using std::cerr;
            14 using std::endl;
            15 using std::exception;
            16 using std::ostream;
            17 using std::ifstream;
            18 using std::ostream_iterator;
            19 
            20 namespace po=boost::program_options;
            21 
            22 // output vector.
            23 template <typename T>
            24 ostream& operator<<(ostream& os, const vector<T>& v)
            25 {
            26     copy(v.begin(), v.end(), ostream_iterator<T>(os, " "));
            27     return os;
            28 }
            29 
            30 int main(int argc, char*argv[])
            31 {
            32     try
            33     {
            34         string conf_file;
            35         po::options_description desc("general descriptions.");
            36         desc.add_options()
            37             ("help""generate help information")
            38             ("config,c", po::value<string>(&conf_file)->default_value("compiler.conf"), "compiler configure file")
            39             ("input-file", po::value<vector<string> >(), "input files")
            40             ("link-file,l", po::value<vector<string> >()->composing(), "link file");
            41 
            42         po::positional_options_description p;
            43         p.add("input-file"-1);
            44 
            45         po::variables_map vm;
            46         //po::store(po::parse_command_line(argc, argv, desc), vm);
            47         po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
            48         po::notify(vm);
            49 
            50       
            51         if(vm.count("help"))
            52         {
            53             cout<<desc<<endl;
            54             return 1;
            55         }
            56 
            57         // add following lines
            58         ifstream i_conf(conf_file.c_str());
            59         if(!i_conf)
            60         {
            61             cerr<<"Configure file not exit.\n";
            62             return -1;
            63         }
            64         else
            65         {
            66             po::store(po::parse_config_file(i_conf, desc), vm);
            67             notify(vm);
            68         }
            69         
            70         if(vm.count("input-file"))
            71         {
            72             cout<<"Input files: "<<vm["input-file"].as<vector<string> >()
            73                 <<"\n";
            74         }
            75 
            76         if(vm.count("link-file"))
            77         {
            78             cout<<"Link file: "<<vm["link-file"].as<vector<string> >()
            79                 <<"\n";
            80         }
            81     }
            82     catch(exception& e)
            83     {
            84         cout<<e.what()<<endl;
            85         return -1;
            86     }
            87 
            88     return 0;
            89 }
            90 

            第38行添加了config參數命令,接受一個string類型值,并將默認值設為compiler.conf.
            第40行添加了composing()方法,這表示程序將從不同的數據源中獲得數據并組合起來.
            第66行解析配置文件并存儲至vm.
            接下來代碼便是比對vm中選項值,簡單吧:)

            boost文檔里介紹了隱藏選項和存放多姐選項的方法,http://www.boost.org/doc/libs/1_45_0/doc/html/program_options/tutorial.html#id2073299





            国内精品久久久久久久涩爱| 久久无码国产| 久久水蜜桃亚洲av无码精品麻豆| 中文字幕乱码久久午夜| 国产午夜免费高清久久影院| 99久久婷婷国产综合精品草原| 久久久精品国产亚洲成人满18免费网站| 青青久久精品国产免费看| 亚洲AV无码久久精品色欲| 办公室久久精品| 久久国产免费直播| 国产99久久久久久免费看| 亚洲精品无码成人片久久| 精品久久久久中文字幕一区| 久久综合九色综合网站| 久久天天躁狠狠躁夜夜不卡| 国产精品久久久久久久久免费| 亚洲精品97久久中文字幕无码| 久久成人影院精品777| 2021国内精品久久久久久影院| 久久99免费视频| 久久久无码人妻精品无码| 日本精品久久久久久久久免费| 伊人久久大香线焦综合四虎| 久久久久亚洲Av无码专| 久久精品久久久久观看99水蜜桃| 久久97久久97精品免视看秋霞| 成人久久综合网| 久久99精品国产99久久6男男| 久久午夜伦鲁片免费无码| 久久久无码精品亚洲日韩京东传媒| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 日韩中文久久| 精品国产青草久久久久福利| 国产精品久久久久无码av| 久久精品国产清高在天天线| 久久精品亚洲一区二区三区浴池| 精品熟女少妇AV免费久久| 久久无码中文字幕东京热| 性欧美大战久久久久久久| 久久久噜噜噜久久|