如何获取 enum 类型的元素个数

hai_feng 2005-05-31 05:33:28
如:

enum E { 1, 2, 3 .... };

如何获取 E 的元素个数?不能用人手工去数数。
...全文
3586 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinhao 2005-06-11
  • 打赏
  • 举报
回复
template<typename _T>
struct enum_size{ const static int value = 0;};
template<typename _T>
class __count{ char x[enum_size<_T>::value];};

template<typename _Enum_Type>
__count<_Enum_Type> enum_size_f(_Enum_Type);


enum xxx{a,b,c}; //定义这个之后就别忘了定义下面这个
template<>struct enum_size<xxx>{ const static int value = 3;}; //3表示3个元素


int main()
{

cout<<enum_size<xxx>::value<<endl; //从类型
xxx x; //从对象
cout<< sizeof(enum_size_f(x)) <<endl;
}

虽然这样定义有点麻烦,但是这样用的用起来也很爽.
nasi00 2005-06-11
  • 打赏
  • 举报
回复
通常都是加一个数来表示结尾的,比如

enum{ A, B, C, ... , END = 999999 }
CloudOfFly 2005-06-10
  • 打赏
  • 举报
回复
用begin end 释代就可以了
hai_feng 2005-06-10
  • 打赏
  • 举报
回复
TrueZq(xx) 的方法有新意,听说 不读取源文件都可以把源程序打印出来的,这2个方法加起来似乎就成功了,不过具体怎么做呢?
hsz8250 2005-06-10
  • 打赏
  • 举报
回复
你觉得有必要吗?enum其实你自己都知道个数
TrueZq 2005-06-10
  • 打赏
  • 举报
回复
char * str = "enum E { 1, 2, 3 .... };"
然后分析逗号的个数

如果非要动态读取,就读取文件自身
suiyun 2005-06-10
  • 打赏
  • 举报
回复
自己不做一个哨兵当然没法知道
byktwc 2005-06-10
  • 打赏
  • 举报
回复
enum e{e,a,b,d,r,y,s};
直接将s+1赋值给int num不就行了!
MagicCarmack 2005-06-10
  • 打赏
  • 举报
回复
UPCC(杂食动物) 的解释不错-_-

BS也是这么解释的
hai_feng 2005-06-10
  • 打赏
  • 举报
回复
up
Sword_liao 2005-06-07
  • 打赏
  • 举报
回复
不大可能吧,就像给你一个类,你事先不知道这个类,却要你告知这个类有多少个数据成员
除非你知道enum的内存结构,难道是这样?num = sizeof(enum e)/sizeof(int);没试过
brianlu 2005-06-06
  • 打赏
  • 举报
回复
mark
xsp919 2005-06-06
  • 打赏
  • 举报
回复
up
CPPLOVER_78 2005-06-06
  • 打赏
  • 举报
回复
回答的不错
lingehu25 2005-06-05
  • 打赏
  • 举报
回复
没办法,顶一下先。
hai_feng 2005-06-05
  • 打赏
  • 举报
回复
up
mingfelicity3 2005-06-05
  • 打赏
  • 举报
回复
up
mostideal 2005-06-02
  • 打赏
  • 举报
回复
呵呵,,顶了。。。
key20003 2005-06-02
  • 打赏
  • 举报
回复
想了半天没有答案,顶!~~
zdy_8212 2005-06-02
  • 打赏
  • 举报
回复
;enum系列:0 1 2 4 8 16,
1。看最后一个数的权位,
2。将最前一个数的值与最后一个数值比较两两排除。LIMIT接近。
3。析出,将每一个数模运算权数。《好像错了。呵。。有感觉的时候可能就说对了。
加载更多回复(12)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧