Можно ли использовать разные типы перечислений в качестве параметров шаблона не тип - PullRequest
0 голосов
/ 07 декабря 2018

Фон:

Я хочу создать типы из значений перечисления, чтобы обрабатывать их в связи с boost :: sml.

Поэтому я хочу создать тип, просто задав значение перечисления, например:

template <typename ENUM_T, ENUM_T VAL >
class Bla
{
};

enum A
{
    a1,
    a2
};

enum B
{
    b1,
    b2
};

int main()
{
    Bla<A::eins> x;
}

Но это не может работать, так как я должен определить тип значения перечисления перед параметром шаблона не тип, который использует этот тип перечисления.

Есть идеи?

1 Ответ

0 голосов
/ 07 декабря 2018

Начиная с C ++ 17 можно использовать параметры шаблона нетипичного типа с автоматическим удержанием типа:

#include <type_traits>

template <auto val>
class Bla
{
    static_assert(::std::is_enum_v<decltype(val)>); // constraint parameter types to enums
};

До C ++ 17 вам нужно будет указать тип параметра нетипичного типа какдругой параметр шаблона:

template <typename T, T val>
class Bla
…
Bla<A, A::eins> x;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...