您的位置:首页 > 运维架构

浅尝Boost之Program_options

2005-05-31 21:35 323 查看
最近想找一个跨平台配置文件类。本来ACE下有一个ACE_Configuration_Heap可以用,感觉也不错。不过只是为了读一下配置文件就把整个ACE库链接进来未免有些小题大作,所以重新寻找。boost里有一个Program_options,在Introduction里写的是The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file. 感觉应该能用,花了几个小时读了一下。
结果出乎我的意料,这个库的设计初衷应该是用来处理命令行参数的,处理配置文件可能只是一个衍生物。对命令行参数处理是不错,对配置文件的支持则让人沮丧。别的不说,单是看一看其配置文件的实例 multiple_sources.cfg,唉!连section都没有!

此文件在 BOOST_ROOT\libs\program_options\example\目录下,内容如下:
#
# Comment out this line to use hard-coded default value of 10
#
optimization = 1
include-path = /opt

如果是要处理命令行,这个类是比较好的。除去一些正常的支持外,还支持UNICODE,支持winmain参数等不少功能。但我想要的是一个处理配置文件的类,只得放手了。

不过这个库有些小技巧感觉还是不错的,下面这段代码如果是C++的初学者可能会很吃惊,因为这个集合加项的语法比较特别,让人感觉清晰明快。

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
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 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: