Я пытаюсь создать объявление типа на основе границ
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
не выполняется?
Передача препроцессора происходит перед семантическим анализом, а enum является семантической конструкцией. Вам нужно использовать шаблоны для реализации этого или сделать L
а также U
макросы, которые определяют константы препроцессора.
Других решений пока нет …