【问题标题】:Convert STL map into a struct将 STL 映射转换为结构
【发布时间】:2012-06-11 16:18:15
【问题描述】:

我有一个std::map<string, double>,其成员看起来像:

X = [{"N", 200}, {"sigma", 1.0}, {"T", .2}]

现在,给定结构 foo Y:

struct foo {
    int N;
    double T;
};

我能否以编程方式映射键/值对 X -> Y而不为每个 X -> Y 类型映射编写自定义类?请注意:

  1. X["sigma"] 不在Y 中,即映射不一定是一对一的
  2. Y.N 的类型是 int 而X["N"] 是 double。

我怀疑答案是否定的,除非在编译时做了一些诡计。

编辑:我可能不清楚我在寻找什么。此示例的伪代码版本如下所示:

if("N" in X) -> Y.N = X["N"];
if("T" in X) -> Y.T = X["T"];

或以编程方式:

for key in Y:
    if (key in X) -> Y.key = X[key]

【问题讨论】:

  • 从您的问题中不清楚您想如何进行映射。

标签: c++ stl map struct


【解决方案1】:

没有。 C++ 没有反射的概念。在编译时,不再有 "foo::N" 字符串。编译器已将源代码中出现的所有foo::N 转换为Foo 对象内的0 字节偏移量。此外,您不能在编译时枚举类成员。

【讨论】:

    【解决方案2】:

    您想根据地图元素中键的(这是一个字符串)在结构类型的对象中设置一个字段 >)。所以,不,它不能在编译时完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2022-01-19
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多