首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有通用get/set实现的属性树状数据结构的框架/库?

具有通用get/set实现的属性树状数据结构的框架/库?
EN

Stack Overflow用户
提问于 2015-05-25 22:51:33
回答 4查看 1.1K关注 0票数 19

我正在寻找一种行为类似于boost::property_tree的数据结构,但(可选)将每个值项的get/set实现留给开发人员。

您应该能够这样做:

代码语言:javascript
复制
std::function<int(void)> f_foo = ...;
my_property_tree tree;
tree.register<int>("some.path.to.key", f_foo);
auto v1 = tree.get<int>("some.path.to.key");    // <-- calls f_foo
auto v2 = tree.get<int>("some.other.path");     // <-- some fallback or throws exception

我猜你可以滥用property_tree来做这件事,但我还没有研究过它的实现,除非我知道这是一个预期的用例,否则我会有一种不好的预感。

首先,通过调用所提供的函数来编写一个类来处理像val = tree.get("some.path.to.key")这样的请求看起来并不太难,但我可以想象出很多特殊情况,这将使它成为一个相当庞大的库。

一些额外的功能可能是:

  • subtree-handling:不仅处理终端键,还将某些子树转发到不同的实现。例如。

tree.register("some.path.config",some_handler);//调用some_handler.get("network.hostname") v= tree.get("some.path.config.network.hostname");属性树在值/键中搜索

  • 自动类型转换(如在property重载中“,例如默认为property_tree-未注册回调的路径的实现。

有没有和我要找的库很接近的库?有没有人有过将boost::property_tree用于此目的的经验?(例如,通过子类化或将特殊对象放入树中,如所描述的here)

EN

回答 4

Stack Overflow用户

发布于 2017-05-27 09:41:07

在对自己的容器类进行了多年的编码之后,我最终采用了QVariantMap。这样,它就相当于python的行为(和python一样灵活)。只有一个界面。不过,这不是性能代码。

如果你想知道,我真的接受了Qt作为我事实上的STL,因为:

  1. 行业标准-甚至在航空电子和卫星软件中使用
  2. 它已经存在了几十年,几乎没有界面更改(考虑长期支持)
  3. 它具有卓越的性能,令人敬畏的文档和庞大的用户基础。
  4. 丰富的功能集,远远超出了STL
票数 1
EN

Stack Overflow用户

发布于 2015-06-03 20:51:13

std::map能做你感兴趣的工作吗?你有没有尝试过这种方法?我不太明白你想做什么。因此,请提供一个域示例。干杯。

票数 0
EN

Stack Overflow用户

发布于 2015-08-24 01:44:36

我有一些home-cooked code that lets you register custom callbacks for each type in GitHub。它非常基础,仍然缺少你想要的大多数功能。不过,我正在开发第二个版本。我正在完成一个帮助器结构,它将完成回调的大部分工作。如果你有兴趣就告诉我。此外,您还可以自己实现其中的一些功能,因为注册回调的代码已经完成。这应该不会那么难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30440997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档