本文Config类的序列化和反序列化使用的jsoncpp, 因为jsoncpp提供的方法很简单易阅读。配置文件的格式自然也是json。
1 { 2 "image" : { 3 "savepath" : "D:\Documents\Pictures\Wayixia" 4 } 5 }
google了一下"C++ Config", 这类的文章有不少,写的很nice,但都是ini的,ini的层次和数据结构是有限的,例如,
1 [image] 2 files=1.jpg,2.jpg,3.jpg
当通过ini工具类读取到files的内容时,不得不需要一个格式化内容的方法或者接口;当配置内容很多的时候,为了便于修改或者阅读,不得不写额外的代码:
1 [sectionname1] 2 fieldname=... 3 4 [sectionname2] 5 fieldname=... 6 7 [sectionname3] 8 fieldname=... 9 10 ...
理想中的配置文件类的接口很简单,自然生产的Josn文件也很简单易读
1 Config config; 2 // 读取文件 3 config.FromFile([filename]); 4 5 // Get一个值 6 // value 是一个类型,可以根据需要自动转换,例如v.toInt(), v.toString()... 7 value v = config.Get("sectionname.fieldname", [default_value]); 8 9 // 转换相应的类型 10 int a = v.toInt() 11 std::string s = v.toString(); 12 ... 13 14 // Set一个值 15 config.Set("sectionname.fieldname", [value]); 16 17 // 保存到文件 18 config.ToFile([filename])
以下是封装的一个Config类, 使用前需要配置好jsoncpp的包含头文件和库,点击这里下载。
自然,用json做配置的应用程序不在少数,有兴趣的同学欢迎参与讨论。发现错误及时通知修正,谢谢!
[2013-07-08] 修正文件读取bug 下载已经更新