• <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久久久久久| 欧美成人免费观看久久| 国产成人久久精品一区二区三区| 精品久久久久久无码中文野结衣| 久久久艹| 2021精品国产综合久久| 激情五月综合综合久久69| 国内精品综合久久久40p| 久久最近最新中文字幕大全| 久久综合五月丁香久久激情| 性欧美丰满熟妇XXXX性久久久| 伊人丁香狠狠色综合久久| 午夜精品久久久久久毛片| 93精91精品国产综合久久香蕉 | 手机看片久久高清国产日韩 | 久久亚洲欧美日本精品| 日本久久久久亚洲中字幕| 久久久久久午夜精品| 情人伊人久久综合亚洲| 精品国产福利久久久| 国产精品久久久久9999| 国产综合久久久久久鬼色| 久久久一本精品99久久精品66 | 久久99精品久久久久久久不卡| 中文精品久久久久人妻| 亚洲中文精品久久久久久不卡| 久久久黄片| 麻豆AV一区二区三区久久| 久久久无码精品亚洲日韩蜜臀浪潮| 中文字幕无码久久精品青草| 亚洲精品高清国产一线久久| 久久久久无码精品国产不卡| 久久精品国产69国产精品亚洲| 久久人人爽人人爽人人片AV麻豆| 久久国产影院| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 国内精品久久久久久中文字幕| 精品伊人久久久| 亚洲一区精品伊人久久伊人| 久久国产精品99久久久久久老狼|