簡體   English   中英

什么是struct NIL {typedef NIL Head; }?

[英]What is struct NIL { typedef NIL Head; }?

我正在閱讀模板元編程。 我無法理解這些線是什么意思; 以下代碼涉及在鏈表上進行元編程。

struct NIL {
typedef NIL Head;
typedef NIL Tail;
};

template <typename H, typename T=NIL> struct Lst {
    typedef H Head;
    typedef T Tail;
};

template <int N> struct Int{ static const int result = N; };
typedef Lst< Int<1>, Lst< Int<2>, Lst< Int<3> > > > OneTwoThree;

以上內容來自https://monoinfinito.wordpress.com/series/introduction-to-c-template-metaprogramming/ 我非常感謝有關struct NIL具有什么意義的指導,它具有typedef NIL Head和typedef NIL Tail。 Nil是一種類型,當然,但是如果我有typedef NIL Head,例如,這是否意味着我在每個頭部內都有另一個遞歸的Head和Tail?

不, typedef NIL Head; 並不意味着你有一個 NIL每個內NIL

它只是意味着NIL::HeadNIL另一個名稱。 同樣適用於NIL::Tail

這意味着你可以遞歸地編寫類型,例如NIL::Head::Tail::Tail::Tail::Head::Head也是NIL的名稱。 但是這里沒有實際的遞歸類型。

NIL只是另一個名字。

它不是NULL因為這是采取的。

在這里,我們正在創建一個LISP,如“head”和“tail”的鏈接列表。 要表示列表的末尾,請放置一個NIL

NIL滿足列表的布局,但是頭部和尾部都是NIL 我自己會被寫成:

struct NIL;

template <typename H, typename T=NIL> struct Lst {
  typedef H Head;
  typedef T Tail;
};

struct NIL:Lst {};

使NIL作為空列表的名稱更加清晰。

通過使NIL具有頭部和尾部,一些模板元編程變得更容易(並且一些變得更難)。 它們是相同類型的事實意味着在某種意義上, NIL列表具有無限長度; 但在另一種意義上它的長度為零,因為我們將長度定義為距離達到NIL之前的距離。

typedef不在類型內,它們在內部定義,就像數據成員一樣。 它們更像是指針而不是成員。 在非模板元編程中:

struct node {
  node* head, *tail;
};
struct NIL:node{
  NIL() : node{this, this} {}
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM