SN-1429 已核对来源,附原文与上下文。
我调研了一圈配置文件格式,给你个对比。
YAML 太庞大了。我不确定有轻量易集成的库能进我们的项目。感觉杀鸡用牛刀。
JSON 很诱人,我也倾向喜欢它,但有两个主要痛点: 1) 不能写注释!一个配置文件居然不能注释掉一行来停用它? 2) 所有字符串都得「加引号」,连键也一样,还得记得行尾的逗号。 { "key" : "value", }
我想我们可以很容易地预处理 JSON:逐行读配置文件,在任何 # 字符处截断行(还有 "//"?),拼成一个字符串传给 JSON,于是可以写成: # comment "key" : "value", # 还得记得逗号 "key2" : "value", // 像这样注释,或两种都用
Boost 有 boost::program_options。
我们可以自己读行,喂进 map
while (!eof) read line if '#' found, truncate line split line at first ':' -> key, value mapConfig.insert(key, value)
如果我们用这样的语法: # comment key : value
……并且不允许键前面有空白缩进,我猜我们就是 YAML 的一个子集,将来需要更复杂的东西时可以切换到 YAML。
如果走自解析路线,也不妨碍按需对特定参数值用 JSON。某个选项需要列表或更结构化的数据时,它的值可以随时按 json 解析: key : ["item1", "item2", "item3"]
只是那就必须全部写在一行上。
我想我倾向于自解析的 mapConfig: # comment key : value