• <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





            国产亚洲美女精品久久久2020| 亚洲精品国精品久久99热一| 久久99精品国产自在现线小黄鸭 | 国产精品伊人久久伊人电影| 久久国产精品一区二区| 久久久国产精品福利免费 | 精品无码久久久久国产| 亚洲国产精久久久久久久| 四虎久久影院| 久久婷婷久久一区二区三区| 亚洲国产精品综合久久一线 | 久久精品视频网| 精品久久久久久久国产潘金莲| 伊人久久精品线影院| 久久人人爽人人爽人人片AV高清 | 性欧美丰满熟妇XXXX性久久久| 一本一道久久精品综合| 伊人久久大香线蕉综合Av| 国产99久久久国产精品~~牛 | 国内精品久久久久久久久| 精品人妻伦九区久久AAA片69| 久久AAAA片一区二区| 精品国产一区二区三区久久久狼| 欧美久久综合九色综合| 国产午夜精品理论片久久| 中文精品久久久久人妻不卡| 久久亚洲高清综合| 久久国产成人午夜aⅴ影院| 成人国内精品久久久久一区| 久久综合给合久久狠狠狠97色| 午夜精品久久久久久| 99久久成人18免费网站| 国产精品久久久久天天影视| AV狠狠色丁香婷婷综合久久| 婷婷五月深深久久精品| 久久久无码人妻精品无码| 精品国产99久久久久久麻豆| 久久受www免费人成_看片中文 | 亚洲精品无码久久久影院相关影片 | 久久国产成人午夜AV影院| 精品久久久久久久中文字幕|