Как в C++ реализовать ассиацию из типов под SFINAE?
Как в C++ реализовать категорию типов с примерами SFINAE (std::enable_if, std::is_integral)? Например, требуется чтобы структура при вызове get_type::type = integer имела ассоциацию из типов перечислений.
Вот код
enum type_t {
integer,
other
};
//Default
template <typename T>
struct get_type {
static constexpr type_t type = other;
};
// For integer
template <>
struct get_type<int> {
static constexpr type_t type = integer;
};
Мне например не хочется заполнять для каждого примитивного типа int, unsigned int, long (etc.) и попробую использовать std::is_integral, как это сделать?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
А если не усложнять, то годится?
template<typename T>
struct get_type
{
static constexpr type_t type = is_integral_v<T> ? integer : other;
};
См. https://ideone.com/S2Ix3b - там, правда, в связи с более старой версией использован is_integral<T>::value.