我正在用C++編寫一個圓圈列表。這裏是我的代碼更優雅的方式返回列表的索引
class CList
{
private:
class ListNode
{
public:
int v;
ListNode *prev;
ListNode *next;
/*constructor*/
};
ListNode *_tail;
public:
typedef const void* const Index;//need a way to represent something like 'index' or 'position'
CList():_tail(0)
{
}
void print()const;
void insert(Index pos, const int &value);
Index find(/*some condition*/);
};
嵌套類ListNode
只是用來執行,所以我不希望的CList
用戶可以訪問ListNode
。但是,因爲它是一個列表,用戶可以在某個位置插入新節點,所以我添加成員Index
(索引不應該被修改!)。但它是愚蠢的,我必須手動將它投射到ListNode*
。有沒有一個優雅的方式來做到這一點?或者使用嵌套類只是乞討的錯誤。
我不確定這是否有任何意義。如果我爲您提供一個「Index」,它實際上是一個指向ListNode的指針,我已經可以訪問它。我可以保持指針並隨意改變它。將它隱藏在「void *」之後並不會改變任何內容。您應該只需要一個'Insert(const T&value)'並在內部創建節點。然後你可以有一個'T Find(const T&value)'。當然,你可以使用'std :: list'並完成它。 –
但用戶無法看到嵌套的私人類'ListNode',不能將其轉換爲'ListNode *'。 – Donglei