Избегайте дублирования кода: typedef / используя шаблонный класс с параметром по умолчанию (C ++ 14)

Как определить псевдоним имени шаблона шаблона, который имеет параметр шаблона по умолчанию без дублирования кода?

В C ++ 14 это улучшается?

В реальном случае это действительно вызывает проблемы с ремонтопригодностью. (демонстрация)

class B{};
template<class T1,class T2,class T3=B>class E{};   //<- "class T3=B"//^ library

//v user
class C{};
template<class T1,class T3=B> using F=E<T1,C,T3>;  //<- "class T3=B" is duplicated
int main() {
F<B> f1;
F<B,C> f2;
return 0;
}

Временное решение

В старом C ++ нет элегантного решения.
Вот лучший обходной путь, модифицированный из Использование typedefed типа по умолчанию для параметра шаблона : —

class B{};
using E_T3_default=B;
template<class T1,class T2,class T3=E_T3_default>class E{}; //<-
//^ library

//v user
class C{};
template<class T1,class T3=E_T3_default> using F=E<T1,C,T3>;  //<-

Моя мечта

Я надеюсь на что-то вроде: —

template<class T1,class T3> using F=E<T1,C,T3>;

а также F<B> будет расширен до E<B,C,B(default)> автоматически (не ошибка компиляции).

1

Решение

Вы можете использовать пакет параметров:

template <class T1, class... T3>
using F = E<T1, C, T3...>;

… напрямую переслать ноль или один аргумент E,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]