本文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 下載已經更新