Как заставить параметр шаблона быть классом enum или enum? - PullRequest
2 голосов
/ 04 марта 2020

Я реализовал следующий класс:

template<typename Enum>
class EnumDescription
{
    //TODO Force Enum to be an enum type

public:
    static std::string get( const Enum val );
};

Это работает, как и ожидалось, но теперь я хотел бы ограничить параметр шаблона Enum только классом enum / enum.

1 Ответ

6 голосов
/ 04 марта 2020

Зависит от вашего вкуса C ++.

C ++ 17

Самый простой способ написать это утверждение c

template<typename Enum>
class EnumDescription
{
    static_assert(std::is_enum_v<Enum>);

public:
    static std::string get( const Enum val );
};

C ++ 20

Вы можете указать ad-ho c ограничение для шаблона

template<typename Enum> requires std::is_enum_v<Enum>
class EnumDescription
{

public:
    static std::string get( const Enum val );
};

или, возможно, к лучшему, с многоразовым понятием

template<typename E>
concept EnumType = std::is_enum_v<E>;

template<EnumType Enum>
class EnumDescription
{

public:
    static std::string get( const Enum val );
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...