в чем разница между 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;.

Другие вопросы по тегам