Мне нужно иметь возможность различать типы данных с одинаковыми размерами, но с разными свойствами подписывания. Пример следующим образом,Дифференциация специализированных структур на основе подписей
template <size_t N>
struct alias;
template<>
struct alias<sizeof(unsigned char)>{
using Type = unsigned char;
};
template<>
struct alias<sizeof(signed char)>{
using Type = signed char;
};
using uint8 = alias<1>::Type;
using int8 = alias<1>::Type; //This is supposed to be signed type
После первой специализации использует символ без знака и оба знака и без знака символы используют один и тот же размер, alias<1>::Type
результатов возвращаются символ без знака. Но я хочу иметь возможность возвращать тот же тип данных, что и подписанный и unsigned.
Мне также известно, что в файле заголовка type_traits есть std :: is_signed или std :: is_unsigned. Я не мог понять, как использовать их в этом контексте.
EDIT
Частичный Полный код
#define BYTE 1
template <size_t N>
struct alias;
#define REGISTER_ALIAS(X) \
template <> \
struct alias <sizeof(X)> { \
using Type = X; \
};
REGISTER_ALIAS(unsigned char)
REGISTER_ALIAS(signed char)
using int8 = alias<BYTE>::Type;
using uint8 = alias<BYTE>::Type;
Что вы в конечном итоге пытаетесь сделать с этим 'alias' структурами? Какой контекст вы планируете использовать? – qxz
Создание типов данных фиксированной ширины без жестко заданных typedef. – ugar
Похоже, вам просто нужен еще один параметр шаблона. – Barry