Ответ 1
Нет, вы не можете.
using
может "возвращать" тип или переменную. Он не может "вернуть" template
. Подобных механизмов не существует.
Вы можете сделать что-то смутно полезное, приняв соглашение о том, что все шаблоны не являются шаблонами, а скорее классами с алиасом template<?>using apply=?;
внутри них (и пока мы находимся в нем, константы std::integral_constants<T,?>
, а указатели pointer_constant<T*,?>
).
Теперь все это класс. template
становятся просто видами классов (с ::apply<?...>
.
Применение набора типов к такому шаблону будет осуществляться с помощью:
template<class Z, class...Ts>
using apply_t = Z::template apply<Ts...>;
Итак, с "родным" шаблоном Z
вы бы сделали Z<Ts...>
. С помощью этих "косвенных" шаблонов вы бы сделали apply_t<Z, Ts...>
.
С помощью этого соглашения шаблон using
может возвращать непрямой шаблон. Если остальная часть вашего кода соответствует соглашению всегда вызывать apply_t
для применения шаблона, и вы косвенным образом меняете все остальные шаблоны, которые вы пишете, мы закончили.
Это некрасиво.