有没有办法找到 C++ 中枚举的基数(大小)?
可以编写一个返回枚举中元素数量的函数吗?例如,假设我定义了:
enum E {x, y, z};
那么 f(E) 将返回 3。
Could one write a function that returns the number of elements in an enum? For example, say I have defined:
enum E {x, y, z};
Then f(E) would return 3.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
没有。
如果有的话,你不会看到这么多像这样的代码:
请注意,此代码也是一个(讨厌的)解决方案的提示 - 如果你添加一个最终的“guard”元素,并且不明确声明枚举字段,那么最后一个“COUNT”元素将具有您要查找的值——发生这种情况是因为枚举计数是从零开始的:
Nope.
If there were, you wouldn't see so much code like this:
Note that this code is also a hint for a (nasty) solution -- if you add a final "guard" element, and don't explicitly state the values of the enum fields, then the last "COUNT" element will have the value you're looking for -- this happens because enum count is zero-based:
有很多方法,但你必须工作......一点:)
基本上你可以用宏来获得它。
它是如何运作的?
请注意,长度也可以是模板专业化或任何东西。我不了解你,但我真的很喜欢 BOOST_PP 中“序列”的表现力;)
There are ways, but you have to work... a bit :)
Basically you can get it with a macro.
How does it work ?
Note that length could also be a template specialization or anything. I dont know about you but I really like the expressiveness of a "Sequence" in BOOST_PP ;)
不,这是一个 VFAQ,答案是否定的!
无论如何,并非没有拼凑。
即使最后一个条目的技巧也只有在所有值都不是非默认的情况下才有效。例如,
No, this is a VFAQ and the answer is NO!!
Not without kludging anyway.
Even that trick about with a final entry only works if none of the values are non-default. E.g.,
不。一方面,您不能将类型作为参数(只能是类型的实例)
No. For one thing, you can't take types as parameters (just instances of types)