То, что вы пытаетесь сделать, не работает.
Если я правильно понимаю, вы хотите, чтобы Type_Class1
в определениях классов было таким же, как Type_Class1<A, ..., Z>
, то есть аргументы шаблона такие же типы, как параметры шаблона класса.
Это возможно только в самом классе:
template<
class A,
class B,
...
class Z>
class Class2
{
using Type_Class1 = Class1<A, ..., Z>;
// Create an obj of Class1,
Type_Class1 class1Obj;
...
};
Вы не можете сделать это вне класса, потому что это выходит за рамки параметры, от которых вы хотите сделать тип зависимым.
То, что вы написали, имеет совершенно другое поведение. Ключевое слово class
при использовании в списке аргументов шаблона, а не в списке параметров определения шаблона, имеет совершенно другое значение и необычное поведение, которое вам, вероятно, не нужно.
Это так называемое разработан спецификатор типа и позволяет объявлять новые классы с заданными именами во включающей области имен (если еще нет типа класса с таким именем, который можно найти при поиске по имени).
Ваш Type_Class1
будет Class1
с аргументами шаблона, равными этим классам, а не параметрами шаблона класса, в котором вы используете Type_Class1
.