Обычно, если я хочу иметь шаблонный (data) класс по enum, я бы написал что-то вроде этого
enum class Modes : int
{
m1 = 1,
m2 = 2,
m3 = 3
};
template <Modes M>
class DataHolder
{
};
template<>
class DataHolder<Modes::m1>
{
public: int a = 4;
};
Тогда, если я хочу получить ту же специализацию для Modes::m1
, что и для Modes::m2
Я бы снова написал ту же специализацию.Есть ли способ написать одну специализацию для нескольких значений enum?Я пробовал это с SFINAE, но я не успешен.
template <Modes M, typename = void>
class DataHolder
{
};
template<Modes M, typename = typename std::enable_if<M == Modes::m1 || M == Modes::m2>::type>
class DataHolder
{
public: int a = 4;
};
Это не компилируется.Особенно после того, как я хотел бы продолжить с другой специализацией для Modes::m3
.Я пробовал много похожего решения, найденного здесь на SO, но, похоже, ничего не решает проблему.