可扩展枚举计划
问题描述:
感谢C++ 11,我们已经获得了有限范围和强类型的枚举。
但是有没有计划让这个可扩展呢?可扩展枚举计划
事情是这样的:
enum class OneTwoThree : char {one=1, two=2, three=3};
enum class Four : char {four=4} extends OneTwoThree;
答
它不会出现如此。
没有纸张就没有C++。方便的是,您可以在线查看所有在线文章here,并在official forums的研究小组中进行更多的非正式讨论(“Future Proposals”小组可能是您对枚举更改感兴趣的人) 。
对于论文,征文粗略搜索标题回至2011年揭示了以下主题:
- (N4266) Attributes for namespaces and enumerators - 这种担忧将属性说明符来枚举或命名空间声明。
- (N4113) Reflection Type Traits For Classes, Unions and Enumerations - 这提出了一系列类型特征用于编译时检查枚举列表大小以及枚举项的名称和值。
- (N3815) Enumerator List Property Queries - 这是与N4113实际功能相同的另一个建议。
- (P0138R0) Construction Rules for enum class Values - 本文讨论与创建更强的“重命名整数”类型相关的转换规则。
这些论文都没有涉及向现有枚举中添加值的机制。类似地,在Future Proposals组中对“enum”的粗略搜索会产生大量的主题,其中没有一个看起来像是从枚举的初始定义以外的地方向枚举中添加新值。
已经做了几次尝试来实现这种没有库或语言紊乱的功能; questions exploring the subject already exist on *,可能对你有用。
+0
谢谢你的广泛答案。 – ttuna
据我所知,不是。 – Vitaliy
如果我没有弄错,'enum class'声明只是说禁止枚举值/整数/等之间的隐式转换,它实际上并不会导致枚举表示一个完整的类型,就像它在Java/Python /等等更不用说子类的语法已经被用来指示底层的数据类型,而'extends'不是C++关键字,iirc C++标准委员会不喜欢增加新的关键字。如果你真的需要C++中的子类化枚举类型,你最好使用带有可变参数,它会给你所有枚举的编译时间正派 – JAB
@JAB模板:_Complete type_在C++特定的含义,和* *每个**'enum'类型都是_complete type_。 'void'是一个不完整的类型的例子。 – MSalters