我正在寻找一种行为类似于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")
这样的请求看起来并不太难,但我可以想象出很多特殊情况,这将使它成为一个相当庞大的库。
一些额外的功能可能是:
tree.register("some.path.config",some_handler);//调用some_handler.get("network.hostname") v= tree.get("some.path.config.network.hostname");属性树在值/键中搜索
有没有和我要找的库很接近的库?有没有人有过将boost::property_tree
用于此目的的经验?(例如,通过子类化或将特殊对象放入树中,如所描述的here)
发布于 2017-05-27 09:41:07
在对自己的容器类进行了多年的编码之后,我最终采用了QVariantMap。这样,它就相当于python的行为(和python一样灵活)。只有一个界面。不过,这不是性能代码。
如果你想知道,我真的接受了Qt作为我事实上的STL,因为:
发布于 2015-06-03 20:51:13
std::map能做你感兴趣的工作吗?你有没有尝试过这种方法?我不太明白你想做什么。因此,请提供一个域示例。干杯。
发布于 2015-08-24 01:44:36
我有一些home-cooked code that lets you register custom callbacks for each type in GitHub。它非常基础,仍然缺少你想要的大多数功能。不过,我正在开发第二个版本。我正在完成一个帮助器结构,它将完成回调的大部分工作。如果你有兴趣就告诉我。此外,您还可以自己实现其中的一些功能,因为注册回调的代码已经完成。这应该不会那么难。
https://stackoverflow.com/questions/30440997
复制相似问题