Есть ли способ определить тип с шаблоном, который принимает необязательные конкретные перечисления и бесконечные типы? - PullRequest
1 голос

У меня есть enum с некоторыми значениями и структура, которая преобразует его в тип.

enum class Types : uint8_t {
    ...
}; 

template<Types type>
struct enum_ {
    ...
}

У меня также есть основной шаблонный класс Action, который является лямбда-подобной структурой с перегруженным оператором (), в зависимости от переданных типов

template<typename...>
struct Action;

template<typename T>
struct Action<T> { ... };

template<typename T, typename R>
struct Action<T, R> { ... };

Проблема в том, что некоторые параметры шаблона могут быть перечислениями (например, T = enum_<Types::type>)

Можно ли сделать что-то подобное:

template<typename... Args>
using ActionType = Action<Args...>;

template<Types type, typename... Args>
using ActionType = Action<enum_<type>, Args...>;

, поэтому в этом случае T является необязательным типом перечисления. Я теперь могу использовать вот так ActionType<enum_<Types::type>, ...>, но мне интересно, есть ли у этой проблемы обходной путь.

...