enum和const数组

Kevin_qing 2005-12-23 01:23:48
编译时如何得到enum的个数和第n个的值?

例如

const int val[]={
1,3,5,7
};

或者 enum val{1,3,5,7}


template <int n>
class Some{
};

想得到类似如下语法的效果.
typedef Some<val[1]> any;//编译错误,val[1]在编译时不能确定值

如果enum不行的话,只有老老实实的特化模板了....
template <int idx>
struct Array;
template <>Array[0]{
enum {Result=1};
}

......


...全文
223 点赞 收藏 14
写回复
14 条回复
guyanhun 2005年12月29日
看起来比较复杂 ~~
回复 点赞
Kevin_qing 2005年12月29日
我需要实现编译时的value to value映射,考虑数组是很方便的.可惜const 数组元素的值不是再编译时期决定的,只有用模板实现了.
template <int idx>struct myMap;
template <> struct myMap<0>{
enum{value=1024};
};
templaye <> struct myMap<1>{
enum{value=512}
};

..........



template <typename Host> struct fast{
void* operator new(size_t size);
.....
};

template <typename Host>
void* typename fast<Host>::operator new(size_t size){
enum {size=sizeof(Host)};
return FastAllocator<size,myMap<size2Idx<size> >::value>::alloc();
}



class useFastAlloc:public fast<useFastAlloc>{
....
};

上面的代码理解意思就行了
回复 点赞
wzjall 2005年12月24日
我记得也是不可以的
回复 点赞
vollin 2005年12月23日
或者定义成const的也行啊。
struct Array
{
Array(int idx):m_idx(idx)
{
}
const int m_idx;
};
回复 点赞
vollin 2005年12月23日
为什么不这样?
struct Array
{
Array(int idx):m_idx(idx)
{
}
int m_idx;
};

Array a(val[0]);
回复 点赞
guyanhun 2005年12月23日
模板特化吧
回复 点赞
双杯献酒 2005年12月23日
gz
回复 点赞
RainWindy 2005年12月23日
不语
回复 点赞
foochow 2005年12月23日
好像不行吧...以前有人问过...
回复 点赞
guyanhun 2005年12月23日
class test{
public:
//static const int val3[4];
static const int val4=1;
};

typedef Some<test::val4> any;
回复 点赞
zw24127 2005年12月23日
呵呵
还是圣诞节快乐!!
回复 点赞
sankt 2005年12月23日
不解
友情up
回复 点赞
Kevin_qing 2005年12月23日
- -
回复 点赞
Kevin_qing 2005年12月23日
up
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告