шаблоны — директива C ++ #elif отбрасывается

Я пытаюсь создать объявление типа на основе границ

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

Решение

Передача препроцессора происходит перед семантическим анализом, а enum является семантической конструкцией. Вам нужно использовать шаблоны для реализации этого или сделать L а также U макросы, которые определяют константы препроцессора.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]