То, что я хотел бы сделать это, чтобы иметь возможность иметь различные объявления одного и того же класса шаблона, на основе значения параметра, например:шаблона перегрузки на основе значения параметра
// Enable if X == 2
template <int X, int W, typename Y,
typename A = int, typename B = int> struct Z {};
// Enable if X != 2
template <int X, typename Y,
typename A = int, typename B = int> struct Z {};
я мог начать с чем-то вроде этого:
template <int X, int W, typename Y, typename A = int, typename B = int,
typename = std::enable_if_t<X == 2>> struct Z {};
template <int X, typename Y, typename A = int, typename B = int,
typename = std::enable_if_t<X != 2>> struct Z {};
Проблема с ним в том, что, по понятным причинам, говорит о том, что он был вновь объявлен с разным числом параметров.
Функция вариационного шаблона может пригодиться для этого, но, к сожалению, поддерживает только типы, а не литералы, как в этом случае.
template <typename... Args> struct Z {};
template <int X, int W, typename Y,
typename A = int typename B = int> struct Z<X, W, Y> {};
тип/несовпадение значение -> Ожидается, тип, получил 'X/W'
Кто-нибудь есть решение для этого?
EDIT
К сожалению я не упоминал ранее, но, к сожалению, я не могу изменить порядок параметров, так как другие параметры после Y
имеют значения по умолчанию.
Это звучит как проблема XY. Чего вы хотите добиться именно? – skypjack