【发布时间】:2017-10-21 20:31:12
【问题描述】:
如果不创建自己的枚举实现,我已经相当确定我要问的问题是不可能的,但我认为值得把它放在那里以防我遗漏了什么,因为它会简化我在工作和自己的项目中都经常遇到这种情况。
基本上,我想要一种通用方式来返回枚举类中所有枚举的列表,或者至少是一种通用方式来返回所有正枚举,直到特定于枚举但在其他方面预先确定的点。好的,最后一个想法令人困惑,所以我将在下面发布我的意思的伪代码......
一种设置特定枚举“键”的方法?用于返回直到给定键的正枚举数:
template<typename EnumType>
std::vector<EnumType> getFullEnumList()
{
std::vector<EnumType> fullEnumList;
for (enumIndex = 0; enumIndex < EnumType::NumEnums; enumIndex++)
fullEnumList.push_back(static_cast<EnumType>(enumIndex));
return fullEnumList;
}
我猜这不会像上面所说的那样实现,因为编译器并不关心我调用每个枚举类的值,只关心它的值和类类型......所有编译器在最后的编译阶段处理吧?
我猜我的第一个想法会涉及到某种形式:
EnumClass::size()
...函数,我已经知道它不存在,但我目前对枚举类的细节还不够了解,无法理解为什么在未来的 c++ 迭代中无法实现它...我猜这是不可能的,或者在大多数枚举类用例中这将是一个不受欢迎的额外开销,否则他们会在几年前实现它......
但要缩小到我的实际问题,除了你们可以提供给我的关于上述思考的额外知识块之外,还有一些我没有想到的通用方法吗?
提前为您的见解喝彩,
皮特
【问题讨论】:
-
您的问题不仅仅是获取枚举数的数量。不要忘记枚举器不必命名连续值 (
enum foo { bar = 22, baz = 420000 };) -
没有将工具指定为 C++ 本身的一部分。您可以编写一个程序来解析枚举类型的定义,并输出源代码以生成列表。该程序需要处理不连续的枚举类型中的值,给定数值有多个名称等。如果您真的想要,该程序还可以输出将枚举值映射到字符串的代码.
-
听起来你想要一些编译时反射 - C++(还没有)。
-
还没有,但我建议观看 Herb 的 Sutter 的 CppCon 17 演讲,该演讲讨论了这个和其他类似的未来方向 youtu.be/4AfRAVcThyA
标签: c++ templates generics enums