C++ 将设置/获取请求映射到C++;类别/结构变化

C++ 将设置/获取请求映射到C++;类别/结构变化,c++,oop,C++,Oop,我在想什么是最好的方法。基本上,我有一个接收外部请求的系统,以便在模型中设置/获取值。问题是,我的模型包含在C++类中,这些类可以嵌套,而请求是简单的(key,value)对。 例如: struct Foo { void setX(int x); int getX() const; struct Boo { void setY(float y); float getY() const; }: }; 如果我收到一个请求,对给定的元

我在想什么是最好的方法。基本上,我有一个接收外部请求的系统,以便在模型中设置/获取值。问题是,我的模型包含在C++类中,这些类可以嵌套,而请求是简单的(key,value)对。 例如:

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为此提供了属性映射

它公开的最基本的接口是

get(map, key)
put(pmap, key, val)
对于左值/可读映射,您还可以获得索引器样式的访问

pmap[key];
pmap[key] = newval; // if not const/readonly
您可以使用现有的属性映射适配器:

  • identity\u property\u map
    type\u identity\u property\u map
  • function\u property\u map
  • 迭代器属性映射
  • shared\u array\u property\u map
  • 关联属性映射
  • const\u associative\u property\u map
  • vector\u property\u map
  • ref\u property\u map
  • static\u property\u map
  • transform\u value\u property\u map
  • compose\u property\u map
或者写一些定制的

实际上,甚至有一个看起来像这样:

put("age",properties,fred,new_age);
put("gpa",properties,fred,new_gpa);
请注意,
age
gpa
可以存储在任何地方(甚至可能需要web请求),但是访问的差异被位于两者之间的PropertyMap接口抽象掉了


我的答案样本:

  • 使用BiMap和Boost多索引容器存储属性

我认为这是不可能的,如果内部类和外部类都有一个成员“y”会怎么样?这是一个单独的问题。。。无论如何,您可以使用两个不同的键(例如“fooY”和“booY”),以便以独特的方式识别每个成员。听起来您好像在寻找反射。不幸的是,在C++中反射是故意最小的。您可能可以使用指向成员函数的指针来实现某些功能,但我不想维护它。