提升属性树值(反)序列化
Posted
技术标签:
【中文标题】提升属性树值(反)序列化【英文标题】:boost property tree value (de-)serialization 【发布时间】:2016-03-30 22:12:16 【问题描述】:tl;博士 有没有办法覆盖 boost.property_tree 序列化 bool(其他内置)值的方式?
我即将用 boost.property_tree 替换一个自写的键值存储。因此,在第一次运行中,我将实现更改为使用 boost.property_tree,但现在我碰壁了,因为旧实现使用整数 0/1 来表示布尔值,而 property_tree 使用真/假。
所以在序列化 ptree 时,我的文件中会出现真/假字符串。这使得生成的文件不能向后兼容我们软件的旧版本,这是我目前不愿意走的路。
我发现了一篇旧帖子 boost property tree put/get DBL_MAX,它更改了写入/读取双精度值的方法,但是当我尝试对 bool 进行相同操作时,我得到一个编译器错误,该结构已经定义(这是正确的,因为它在ptree_translator.hpp)。
【问题讨论】:
【参考方案1】:这意味着你不能使用这个机制,因为库已经使用了自定义点。
你可能不需要这个
阅读端好像已经支持旧格式了。所以,你应该很好地阅读旧格式。
您可以使用强 typedef(或自定义枚举,如 Bool my_false_rep, my_true_rep
),可以使用自定义点而不会发生冲突。
【讨论】:
也许我说得不准确。我知道 property_tree 在阅读时可以处理 1/0 真/假。问题是旧的(pre-property_tree)阅读器无法解析真/假,但这就是我在 ptree 序列化 bool 值时总是得到的。因此,一旦文件与新版本一起保存,用户将无法使用我们想要禁止的旧版本软件打开它。带有强类型布尔的提示很好,我只是想知道库是否提供了另一种方式。 没有别的办法。或者更确切地说,所有“其他方式”都意味着使用另一种数据类型而不是bool
/或/拼出特殊转换以上是关于提升属性树值(反)序列化的主要内容,如果未能解决你的问题,请参考以下文章