InsideDarkWeb.com

Использование ограничения шаблона SFINAE при полной специализации

Необходимо получать некий идентификатор для типа, сделано через полную специализацию шаблона.

template<typename T> struct ids;
template<> struct ids<int> { static const int id = 1; };
template<> struct ids<float> { static const int id = 2; };

Возможно ли аналогично специализировать шаблон для любого типа, проходящего ограничение std::is_class?
Не совсем представляю, как это правильно сделать. Думал, что это должно выглядеть примерно так:

template<typename T, typename = typename std::enable_if<std::is_class<A>::value>>
struct ids { static const int id = 3 };

One Answer

#include <type_traits>

template<typename x_Value, typename x_Enabled = void>
struct ids;

template<>
struct ids<int, void>
{ static inline constexpr int const id{1}; };

template<>
struct ids<float, void>
{ static inline constexpr int const id{2}; };

template<typename x_Value>
struct ids<x_Value, ::std::enable_if_t<::std::is_class_v<x_Value>>>
{ static inline constexpr int const id{3}; };

static_assert(1 == ids<int>::id);
static_assert(2 == ids<float>::id);

struct something{};

static_assert(3 == ids<something>::id);

https://godbolt.org/z/6ax86d

Correct answer by user7860670 on January 12, 2021

Add your own answers!

Related Questions

Синхронизация потоков, различия

1  Asked on July 30, 2020 by gwenbleidd

     

Получить данные ajax

0  Asked on July 25, 2020 by ilyaaa521

         

Вставка записанного результата в

1  Asked on July 23, 2020 by quick-brown-fox

 

Ask a Question

Get help from others!

© 2021 InsideDarkWeb.com. All rights reserved.