gpt4 book ai didi

c++ - 将设置/获取请求映射到 C++ 类/结构更改中

转载 作者:行者123 更新时间:2023-11-30 02:41:41 25 4
gpt4 key购买 nike

我想弄清楚这里最好的方法是什么。基本上我有一个系统,我可以在其中接收外部请求以便在我的模型中设置/获取值。问题是我的模型由可以嵌套的 C++ 类组成,而请求是简单的(键、值)对。

例如:

struct Foo {
void setX(int x);
int getX() const;

struct Boo {
void setY(float y);
float getY() const;
}:
};

如果我收到针对给定元素 e 的 set(y, 21) 请求,那么我需要执行的操作将根据 foo 和 boo 是否已经存在而有所不同。必须处理每个属性的不同可能性最终会导致编写大量代码。

在重新发明轮子之前,我想知道 C++ 中是否已经存在一个库或一个众所周知的技术,允许以通用方式将这种平面操作映射到 C++ 结构(可以嵌套)中的变化。

谢谢

最佳答案

Boost 具有用于此目的的 Property Maps。

它暴露的最基本的接口(interface)是

get(map, key)
put(pmap, key, val)

对于左值/可读映射,您还可以获得索引器 样式访问

pmap[key];
pmap[key] = newval; // if not const/readonly

您可以使用现有的属性映射适配器:

  • identity_property_maptyped_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);

请注意,agegpa 可以存储在任何地方(甚至可能需要网络请求),但是访问的差异被位于的 properymap 接口(interface)抽象掉了介于两者之间。


我的回答示例:

关于c++ - 将设置/获取请求映射到 C++ 类/结构更改中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27863061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com