в чем разница между Node * next и Node <T> * next?
Я писал реализацию связанного списка
в приведенном ниже коде мы имеем
Node<T> * next;
а также
Node * next;
Я думаю, что оба делают то же самое, что и указывают на объект класса Node, или между ними есть разница.
template<typename T>
class Node{
T data;
Node<T>* next;
Node * next;
Node()
{
next = nullptr;
}
Node(T val)
{
this->data = val;
next = nullptr;
}
};
1 ответ
Нет разницы между
Node<T> * next;
а также
Node * next;
, если оба объявлены внутри тела класса.
Как указано здесь.
В следующих случаях внедренное имя-класса рассматривается как имя-шаблона самого шаблона класса:
- за ним следует <
- он используется в качестве аргумента шаблона, который соответствует параметру шаблона шаблона
- это последний идентификатор в разработанном спецификаторе класса объявления шаблона дружественного класса.
В противном случае он рассматривается как имя-типа и эквивалентен имени-шаблона, за которым следуют параметры-шаблона шаблона класса, заключенные в <>.
Итак, имя
Node * next
разрешается в
Node<T>* next;
.