Внутренний класс шаблона как параметр шаблона шаблона - PullRequest
0 голосов
/ 26 августа 2018

У меня есть класс, который принимает параметр шаблона шаблона:

template <template <typename> class F>
class A {};

И еще один шаблонный класс с внутренним шаблонным классом:

template <typename T>
class B {
  public:
    template <typename U>
    class C {};
};

Я хочу иметь возможность использовать C как параметр шаблона шаблона для A в шаблонном контексте:

template <typename T>
using D = A<B<T>::C>;

Однако это приводит к сообщению об ошибке:

"аргумент шаблона для параметра шаблона шаблона должен бытьшаблон класса или псевдоним типа "

Я предполагаю, что мне не хватает магического заклинания typename и template в объявлении D, но я не могу понять это на всю жизньи сообщение об ошибке не особенно полезно.

1 Ответ

0 голосов
/ 26 августа 2018

В сообщении об ошибке указывается, что B<T>::C не является шаблоном, поэтому он не соответствует параметру шаблона шаблона A.

Вам необходимо использовать ключевое слово template, чтобы сообщить компилятору, что зависимое имя B<T>::C (которое зависит от параметра шаблона T) равно шаблон.

template <typename T>
using D = A<B<T>::template C>;
//                ~~~~~~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...