我有一个相当大的C ++应用程序(在Windows上,没有计划其他平台),它目前在Windows注册表中存储所有设置(甚至某种地址)。
有时这很不方便,因为用户在更改注册表中的条目时遇到了困难。我想设置版本,因此设置始终与当前代码匹配。目前我们对reg-files进行了版本控制,但是如果所有的reg文件都已添加到目标计算机上,那么您永远不会确定。使用C#,您可以在app.config中定义默认值,但不要覆盖现有设置。我不知道,如果C ++存在这样的机制或库。
我想拥有以下“功能”:
据我所知,在Windows上存储设置有三种可能性:
我们套件中只有一个应用程序目前使用Qt,但Boost可用。
对于地址,我们会将它们放在某种XML地址簿中,但对于其他设置,我们不确定,最佳做法是什么。
答案 0 :(得分:4)
正如评论所提到的,基于树的键/值结构是一种常见的解决方案,并且库很容易找到。
Boost's property_tree是一个很好的选择,因为它经过了充分测试,可以轻松导出为XML或JSON
关于您的要求:
- 可以对设置进行版本控制
是的!使“版本”成为顶级密钥。使其与其他版本轻松相媲美。
您还可以将设置分类为各种树节点,并为每个节点提供版本。
- 目标计算机上的简单更新(可由用户完成)
让您的应用程序在运行时执行此操作。见下文。
- 确保在更新时仅添加新设置,并且不会使用默认值覆盖现有设置
- 简单更改用户设置
- Win XP和Win 7下的相同工作流程
随着设置从一个版本更改为另一个版本,通常这些更改分为三类。需要新属性,放弃旧设置,并且某些设置会更改其预期格式。例如。 “32华氏度”变成“0摄氏度”
当您的应用程序初始化时:
您的“缺失设置”功能可以: