0

我正在尝试基于边界创建类型声明

template<class B>
struct IntDecl {

enum {
    L = B::_l, U = B::_u
};
 #if (L >=0 && U <=255)
  typedef char Type;
 #elif (L>=0&&U<=65535) 
  typedef unsigned int Type;
 #endif

};

因此,正如您在此处看到的,将根据值LU类型来定义。例如

IntDecl< BOUND < 0, 65535 > >::Type i; // this should be a unsigned int 
IntDecl< BOUND < 0, 255 > >::Type i1;  // this should be a char

问题是, (ii1) 都被考虑chars了,换句话说,#elif被丢弃了。有什么帮助吗?为什么#elif不执行?

4

1 回答 1

2

预处理器传递发生在语义分析之前,枚举是一种语义构造。您需要使用模板来实现这一点,或者使用定义预处理器常量的makeL和宏。U

于 2013-05-13T23:47:08.080 回答