POSITION用法解釋,POSITION是什麼?

POSITION是MFC模板類庫中經常使用的一個數據類型,我們從它的定義可以看出,其實,它就是一個指針。

// abstract iteration position

struct __POSITION { };

typedef __POSITION* POSITION;

MFC給出的註釋是:一個抽象的迭代位置,既然是抽象,也就是沒有給定具體的數據類型,以滿足不同的模板參數的需要。

在CList中,經常會用到POSITION作爲引用參數,或者作爲返回值。下面,我們就舉2個簡單的例子,來幫助大家理解這個數據類型,不過在此之前,我要囉嗦一下,因爲有很多人對__POSITION這個空結構體,表示懷疑,似乎這成爲了他們理解的障礙。既然是一個空的結構體,怎麼能用它來定義指針呢?

其實,C++編譯器,不會將一個空的結構體完全看成是空的,編譯器會爲它分配1byte的內存,其實說白了__POSITION這個結構體,就相當於一個unsigned char的類型,所以__POSITION也就相當於是unsigned char,也就是Windows裏面的BYTE類型,從而POSITION也就有了一個可以等價的形式,那就是BYTE*。

我們舉CList中2個典型的成員函數作爲講解的重點,當然,大家應該知道CList是一個鏈表數據結構。下面看這兩個函數:

1. POSITION GetHeadPosition() const;

顯而易見,這個函數,是用來獲取鏈表頭的,它的返回值是一個POSITION,其實也就是一個指針。這個指針代表了誰?當然,就是你一直想要的鏈表頭在鏈表中的指針,這個指針是new出來的,你絕對不能擅自的將這個指針delete掉。

2. TYPE& GetAt(POSITION position);

這個函數,看起來,比較怪。它的唯一的入參是一個指針,其實,有可能就是你剛剛用GetHeadPosition獲得的頭節點指針。這個函數的意思,也就是,需要你提供一個節點的地址,然後,CList會遍歷整條鏈,去尋找並返回符合這個地址的節點數據。

廢話了那麼多,一言以蔽之,畢其功於一役,換句話說就是:

POSITION,你可以把它看成是一個學號,有了它,你就可以找到任何一個你朝思暮想的小美眉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章