我正在尝试根据边界创建一个类型声明
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
};
因此,正如您在此处看到的,取决于L
和U
的值,将定义类型。
例如
IntDecl< BOUND < 0, 65535 > >::Type i; // this should be a unsigned int
IntDecl< BOUND < 0, 255 > >::Type i1; // this should be a char
问题是,(i
和i1
)都被视为chars
,换句话说,#elif
被丢弃。任何帮助?为什么#elif
没有执行?
答案 0 :(得分:2)
预处理器传递在语义分析和枚举是语义构造之前发生。您需要使用模板来实现它,或者创建定义预处理器常量的L
和U
宏。