Шаблон класса и тип - PullRequest
       0

Шаблон класса и тип

0 голосов
/ 06 июля 2019
template<typename T>class node{};

Теперь, если бы я использовал следующее определение шаблона в моем .hpp файле

template<typename node<T>> class list{};

, код не компилируется:

Журнал компилятора

Но если бы я изменил определение на

template<typename X> class list{};

И использовал node<string> вместо X во время создания экземпляра, все работает нормально.

Я хотел бы понять, почему код не компилируется в первом случае?AFAIK, node<T> - это отдельный тип, такой же как X.

Цените ваши мысли.

1 Ответ

1 голос
/ 06 июля 2019

Как вы обнаружили, это не работает:

template<typename node<T>>

Это потому, что токен после typename должен быть именем, заданным аргументом шаблона, а не комбинацией имени (T) и существующего типа.

Если вы хотите ограничить свой класс шаблона, чтобы убедиться, что он использует узел, вы можете сделать это:

template<typename T>
class list{ /* use node<T> here */ };

Или это, если вы просто хотите сделать предложение, а не жесткое требование:

template<typename T, typename N = node<T>>
class list{ /* use N here */ };

В любом из этих случаев list<int> будет использовать node<int> для внутреннего использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...