假设一个 enum class
enum class MY_ENUM {FOO, BAR};
Run Code Online (Sandbox Code Playgroud)
和一个std::map包含枚举中每个元素的信息
map<MY_ENUM, MyInfoType> enumInfos;
Run Code Online (Sandbox Code Playgroud)
如何在编译时确保枚举的每个值在地图中都有一个条目?
我希望能够写出类似的东西(当然这段代码无效):
for (auto& elem : MY_ENUM) {
static_assert(enumInfos.find(elem) != enumInfos.end(),
"Error: Information for an element in MY_ENUM is missing.")
}
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
简答:不,这是不可能的.那是因为a std::map不能在编译时构建:它没有constexpr构造函数,并且有一个非平凡的析构函数.
至于为什么map以某种constexpr方式实现的挑战,可能是因为它使用默认分配器的动态内存分配.如果以某种方式可以构造一个编译时分配器(可能在C++中永远不会说永远不会),那么就有可能有一个constexpr映射.
| 归档时间: |
|
| 查看次数: |
1023 次 |
| 最近记录: |