在与模板类自身相同类型的模板中使用类型别名

时间:2019-02-24 03:25:44

标签: c++ templates

我不了解singly_linked.hpp中的一些代码:

template <class T>
struct singly_linked {
  // -- member types -----------------------------------------------------------

  /// The type for dummy nodes in singly linked lists.
  using node_type = singly_linked<T>;  // exactly type of node_type???

  /// Type of the pointer connecting two singly linked nodes.
  using node_pointer = node_type*;

  // -- constructors, destructors, and assignment operators --------------------

  singly_linked(node_pointer n = nullptr) : next(n) {
    // nop
  }

  // -- member variables -------------------------------------------------------

  /// Intrusive pointer to the next element.
  node_pointer next;
};

node_type的确切类型是什么?它会导致无限循环吗?例如,如果我有:

singly_linked<int> node;

singly_linked<int>::node_type是什么类型?

1 个答案:

答案 0 :(得分:1)

您误解了using node_type = singly_linked<T>;的含义。它没有声明类型singly_linked<T>的变量(这确实会导致无限递归并会导致编译器错误)。而是为此类型引入了一个别名:singly_linked<T>

因此,询问singly_linked<int>::node_type的类型是没有意义的,因为它本身就是类型。