我正在用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