具有通用get/set实现的属性树数据结构框架/库
framework/library for property-tree-like data structure with generic get/set-implementation?
我正在寻找一种数据结构,其行为类似于boost::property_tree
,但(可选)将每个值项的get/set实现留给开发人员。
你应该能够做这样的事情:
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); // calls some_handler.get<int>("network.hostname") v = tree.get<int>("some.path.config.network.hostname");
查找值/键
- 自动类型铸造(如
boost::property_tree
) - "路径重载",例如默认为property_tree-implementation,用于没有注册回调的路径。
有图书馆接近我要找的吗?有人为此目的使用boost::property_tree
的经验吗?(例如,通过子类化或将特殊对象放入树中,如这里所述)
经过多年编写自己的容器类后,我最终采用了QVariantMap。通过这种方式,它的行为(和python一样灵活)。只有一个界面。
如果你想知道,我真的屈服于Qt作为我事实上的STL,因为:
- 行业标准-甚至用于航空电子设备和卫星软件
- 它已经存在了几十年,几乎没有改变界面(考虑长期支持) 它具有出色的性能,令人敬畏的文档和庞大的用户基础。
- 广泛的功能集,远远超出STL
std::map能胜任你感兴趣的工作吗?你试过这种方法吗?我不太明白你想干什么。请提供一个域的例子。欢呼。
我有一些自制的代码,可以让您在GitHub中为每种类型注册自定义回调。它是相当基本的,仍然缺少大多数你想要的功能。不过我正在研究第二个版本。我将完成一个助手结构,它将完成大多数回调工作。如果你感兴趣,告诉我。另外,您可以自己实现其中的一些特性,因为注册回调的代码已经完成了。这应该没有那么难。
仅使用已提供的数据结构:
首先,getter和setter并不是c++的原生特性,你需要以这样或那样的方式调用它们。要实现这种行为,可以重载赋值操作符。我假设您也希望在数据结构中存储POD数据。因此,在不知道要"获取"的数据类型的情况下,我能想到的唯一选择就是使用boost::variant。但是,您仍然需要做一些重载,并且您至少需要一个赋值。
您可以查看文档。这是非常直接和容易理解的。
http://www.boost.org/doc/libs/1_61_0/doc/html/variant/tutorial.html创建自己的数据结构:
或者,正如Dani提到的,您可以提出自己的实现,并保留重载方法的寄存器等等。
最好- 链表,反向函数,数据结构
- 如何使用set实现无序数据结构?
- 我们可以将数据永久保存为数据结构吗?
- C++中的可变长度数组/数据结构
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 通过 NIF 从C++返回自定义数据结构
- 编译器上的策略数据结构不起作用
- 尝试构建"lock-free"数据结构C++
- 设计将引用元素移动到开头的数据结构.C++
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何解析表示树状数据结构的字符串
- 我对数据结构、双向链表有一些问题
- googletest:测试太大的数据结构
- C++中deque数据结构的大O是什么?
- 我可以使用哪种数据结构来处理这种方式
- 将文本文件解析为树状数据结构
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 具有通用get/set实现的属性树数据结构框架/库