浅尝Boost之Program_options

配置文件的实例 multiple_sources.cfg

此文件在 BOOST_ROOT\libs\program_options\example\目录下,内容如下:

 #
 # Comment out this line to use hard-coded default value of 10
 # 
 optimization = 1
 include-path = /opt

小技巧:

namespace po = boost::program_options;
po::options_description generic("Generic options");
generic.add_options()
  ("version,v", "print version string")
  ("help", "produce help message") ;   

    
怎么做到这样的效果?我简化了Program_options.add_options()相关的类和代码,有兴趣的朋友可以看一下。

namespace demo
{
    class option_description_demo
    {
    public:
        option_description_demo(const char* name, const char* description):
          _name(name), _description(description)
          {
          }
          std::string name() {return _name;}
          std::string description() {return _description;}
    private:
        std::string _name, _description;
    };

    class options_description_demo;

    class options_description_easy_init_demo
    {
    public:
        options_description_easy_init_demo(options_description_demo* owner): _owner(owner)
        { 
        }
        options_description_easy_init_demo& operator()(const char* name, const char* description);
    private:
        options_description_demo* _owner;
    };

    class options_description_demo
    {
    public:
        void add(boost::shared_ptr<option_description_demo> desc)
        {
            _options.push_back(desc);
        }

        options_description_easy_init_demo add_options()
        {       
            return options_description_easy_init_demo(this);
        }
        
        void show()
        {
            for(int i=0; i<_options.size(); ++i)
            {
                cout << "[" << _options[i]->name() <<  "]  " << _options[i]->description() << endl;
            }
        }

    private:
        std::vector< boost::shared_ptr<option_description_demo> > _options;
    };

    options_description_easy_init_demo& options_description_easy_init_demo::operator()(const char* name, const char* description)
        {
            boost::shared_ptr<option_description_demo> item(new option_description_demo(name, description));
            _owner->add(item);
            return *this;
        }
};


测试代码
 

    demo::options_description_demo set;
    set.add_options()
        ("name", "value")
        ("version", "print version string")
        ("help", "produce help message");
    set.show();

结果:

/*
[name]  value
[version]  print version string
[help]  produce help message
 */

 

转载于:https://my.oschina.net/chaenomeles/blog/911262

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值