Вложенный шаблон с использованием / typdef - PullRequest
0 голосов
/ 09 апреля 2020

Скажите, что у меня есть эта настройка:

template<typename T1>
struct A {
  template<typename T2>
  struct B {
    using type = int;
  };
};

Я бы хотел иметь возможность сформировать typdef / используя:

template<typename T1,typename T2>
using type2 = A<T1>::B<T2>::type;
//... and use like
type2<int,char> foo;

G CC жалуется, что мне нужно typename A<T1>::B<T2>::type вместо этого, а потом жалуется, что ожидает ";" до "<" после B (т.е. <code>typename A<T1>::B)

нет ли способа использовать "использование" с вложенными шаблонами?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Обратите внимание, что B является шаблонным классом, а type заключен в шаблонный класс, поэтому используйте следующее

#include <iostream>
template<typename T1>
struct A {
    template<typename T2>
    struct B {
        using type = int;
    };
};

template<typename T1,typename T2>
using type2 = typename A<T1>::template B<T2>::type;

int main()
{
    type2<int,char> foo =2;
    std::cout << foo;

}
1 голос
/ 09 апреля 2020

Переключение с

using type2 = A<T1>::B<T2>::type;

на

using type2 = typename A<T1>::template B<T2>::type;
...