• <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 逐漸 閱讀(558) 評論(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





            久久精品99无色码中文字幕| 精品蜜臀久久久久99网站| 色偷偷888欧美精品久久久| 国产精品成人久久久久三级午夜电影| 国产精品久久久久乳精品爆| 久久亚洲精品成人无码网站| 亚洲国产另类久久久精品黑人| 青青草国产精品久久久久| 久久亚洲电影| 久久久久久久尹人综合网亚洲| 欧美午夜A∨大片久久| 国产精品久久久久jk制服| 亚洲欧美日韩久久精品| 久久久综合九色合综国产| 久久久久国产精品嫩草影院| 国产成人精品久久二区二区| 久久综合九色综合网站| 99久久精品免费国产大片| 久久天天躁狠狠躁夜夜avapp| 久久久久99精品成人片三人毛片| 久久国产精品99国产精| 亚洲日本久久久午夜精品| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久综合综合久久综合| 久久精品国产亚洲一区二区三区| 东京热TOKYO综合久久精品| 欧美一级久久久久久久大片| 99热成人精品免费久久| 久久久青草久久久青草| 91久久精一区二区三区大全| 成人久久免费网站| 777午夜精品久久av蜜臀| 久久婷婷午色综合夜啪| 香蕉久久永久视频| 久久精品国产99国产精品导航| 欧美日韩中文字幕久久久不卡| 久久99国产一区二区三区| 久久99久久无码毛片一区二区| 91精品观看91久久久久久 | 久久久这里只有精品加勒比| 久久久久久久亚洲精品|