【发布时间】:2013-08-25 02:17:49
【问题描述】:
我正在用 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*。有没有一种优雅的方式来做到这一点?或者使用嵌套类只是乞讨时的错误。
【问题讨论】:
-
我不确定这是否有意义。如果我为您提供一个“索引”,它实际上是一个指向
ListNode的指针,我已经可以访问它了。我可以随意维护指针并对其进行变异。将其隐藏在void*后面不会改变任何事情。您应该简单地拥有一个Insert(const T& value)并在内部自己创建节点。然后您可以拥有T Find(const T& value)。当然,您可以使用std::list并完成它。 -
但是用户看不到嵌套的私有类
ListNode,你不能把它转换成ListNode*。
标签: c++ nested-class