C ++ #elif指令正在被丢弃

时间:2013-05-13 23:44:12

标签: c++ templates c-preprocessor preprocessor-directive

我正在尝试根据边界创建一个类型声明

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没有执行?

1 个答案:

答案 0 :(得分:2)

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