本文Config類的序列化和反序列化使用的jsoncpp, 由於jsoncpp提供的方法很簡單易閱讀。配置文件的格式天然也是json。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文件也很簡單易讀google
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的包含頭文件和庫,點擊這裏下載。 spa
天然,用json作配置的應用程序不在少數,有興趣的同窗歡迎參與討論。發現錯誤及時通知修正,謝謝!.net
[2013-07-08] 修正文件讀取bug 下載已經更新code