AnswerBun.com

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

Stack Overflow на русском Asked by mkkik on January 12, 2021

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

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 January 16, 2021 by catea

   

Lombok под Eclipse

2  Asked on January 15, 2021

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir