我试图找出这里最好的方法是什么。基本上我有一个系统,我可以在其中接收外部请求,以便在模型中设置/获取值。问题是我的模型由可以嵌套的 C++ 类组成,而请求是简单的(键、值)对。
例如:
struct Foo {
void setX(int x);
int getX() const;
struct Boo {
void setY(float y);
float getY() const;
}:
};
如果我收到这样的请求set(y, 21)
对于给定的元素 e,那么我需要执行的操作将根据 foo 和 boo 是否已经存在而有所不同。必须考虑每个属性的不同可能性最终会编写大量代码。
在重新发明轮子之前,我想知道 C++ 中是否已经有一个库或一项众所周知的技术,允许以通用方式将这种平面操作映射到 C++ 结构(可以嵌套)中的更改。
Thanks
Boost 有用于此目的的属性映射。
- http://www.boost.org/doc/libs/1_57_0/libs/property_map/doc/property_map.html
它暴露的最基本的接口是
get(map, key)
put(pmap, key, val)
对于左值/可读映射,您还可以获得indexer风格访问
pmap[key];
pmap[key] = newval; // if not const/readonly
您可以使用现有的属性映射适配器:
-
identity_property_map
and typed_identity_property_map
-
function_property_map
iterator_property_map
shared_array_property_map
associative_property_map
const_associative_property_map
vector_property_map
-
ref_property_map
-
static_property_map
-
transform_value_property_map
-
compose_property_map
或编写自定义的。
甚至还有一个dynamic_property_map实际上看起来像这样:
put("age",properties,fred,new_age);
put("gpa",properties,fred,new_gpa);
注意age
and gpa
可以存储在任何地方(甚至可能需要网络请求),但是访问的差异被位于两者之间的properymap接口抽象掉了。
我的回答示例:
- 一张图 BOOST 是否可以有多个边权重属性图?
-
图的割集,Boost Graph Library使用 BiMap 和 Boost Multi Index 容器来存储属性
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)