模块属性名称 - 值对C++ API框架 - 重新发明?

pap*_*jam 7 c++ api settings properties boost-propertytree

我经常遇到API,允许用户获取和设置控制模块操作的各种参数.我现在发现自己正在考虑编写另一个属性API但不想重新发明轮子.

以下是典型的基本客户端代码:

setInt("bitrate", 1000);
setEnum("mode", MODE_FAST);
setStr("output file", "music.mp3");
Run Code Online (Sandbox Code Playgroud)

通常可以设置许多参数,并且这些属性集通常在不断发展中.

有些API比其他API更智能,更高级的功能是:

  • 属性的分层分组
  • 枚举属性
  • 具有强制最小值和最大值的数字参数
  • 默认参数值
  • 启用,禁用或只读的设置
  • 动态参数 - 显示,消失,设置最小/最大,启用,禁用或只读的设置,具体取决于其他参数的状态.
  • 通过UUID键而不是文本名访问的属性

除了上面示例代码中的C风格访问器之外,我还遇到了以下框架:

  • 读/写文件属性(例如XML)
  • 对Windows注册表的读/写设置
  • 与系统属性API的接口 IPersistPropertyBag
  • 拥有默认的哑GUI实现,例如树视图或列表
  • 具有适合于最小/最大/启用状态的GUI扩展,从而减少GUI代码中的重复.

我很想找到一个精心设计的公共图书馆,为上述所有人提供框架,但到目前为止已经画了一个空白.我知道Boost.PropertyTree,但它只是一个骨架.我应该注意其他可移植属性API框架吗?

aji*_*tix 0

如果您不介意依赖 Qt Core,那么 Qt 有一个设计相当好的属性系统。这意味着您将依赖 Qt 的MOC