我正在尝试基于边界创建类型声明
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
不执行?