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"에 대한 포인터 인 "Index"를 제공하면 이미 액세스 할 수 있습니다. 내가 원하는대로 포인터를 유지하고 변경할 수 있습니다. 'void * '뒤에 숨기면 아무것도 바뀌지 않습니다. 단순히'Insert (const T & value)'를 가지고 내부적으로 노드를 생성해야합니다. 그런 다음'T 찾기 (const T & value)'를 가질 수 있습니다. 물론'std :: list' 만 사용하면됩니다. –
하지만 사용자는 중첩 된 비공개 클래스'ListNode'를 볼 수 없으므로 'ListNode *'로 캐스트 할 수 없습니다. – Donglei