У меня есть шаблонный класс G:
template<int I>
class G {}
И так получилось, что мне нужно 2 реализации, основанные на этом int I
Если бы это было одно значение, я бы всегдабыть в состоянии сделать:
template<>
class G<int Specific_I>
{
/*Implementation for that I*/
}
Если бы у меня было одно условие, которое показывает, что для реализации - 1, если оно истинно, и для реализации - 2, если ложно, я мог бы использовать совет, данный здесь
Но моя ситуация носит более общий характер.
Допустим, я определил условия для I
для каждой реализации:
template<int I>
constexpr bool Condition_1 = /*whatever*/;
template<int I>
constexpr bool Condition_2 = /*whatever_v2*/;
Это позволяет легко читать и расширять при необходимости.
И если я получаю ошибку из-за отсутствия или нескольких условий, применяемых для определенного I
при вызове в программе, я согласен с этим
Очевидный выбор - использовать std::enable_if_t
template<int I,
enable_if_t<Condition_1<I>>
>
class G
{
/*Implementation based on Condition_1*/
}
template<int I,
enable_if_t<Condition_2<I>>
>
class G
{
/*Implementation based on Condition_2*/
}
Но это вызывает ошибку
template parameter ‘typename std::enable_if<Condition_1<I>, void>::type <anonymous>’|
redeclared here as ‘typename std::enable_if<Condition_2<I>, void>::type <anonymous>’|
Где я допустил ошибку и как это исправить?