首页 > 解决方案 > 从其他类的静态数据成员初始化映射

问题描述

我们有将静态数据成员公开为公共成员的类,例如

class A{
public:
    static const string NAME;
    //Other class specific methods
};

和类似的B类和其他一些类。

如果我必须创建一个类似的地图

static const map<string, string> versionMap = {{A().NAME, "Aa"},
                                               {B().NAME, "Bb"}
                                              };

在创建 versionMap 时创建的类的临时对象,是否保证始终具有定义的行为?

标签: c++c++11

解决方案


似乎您可能正在使用类名实现某种反射机制。为什么不实际获取类名作为名称?

看一下:

我可以以 constexpr 方式获取 C++ 类型名称吗?

那里接受的答案允许您编写get_name<A>()并获得一个字符串(_view),它是“A”。并且get_name<B>()将是“B”等等。这在您的情况下可能很有用,因为:

  1. 没有动态分配的数据。
  2. 不构造任何对象(尽管@jhill515 也为您提供)
  3. 不需要静态成员 - 这可以与您甚至无法控制的类一起使用!

推荐阅读