C++で一般的なリンクリストを作成する方法については、かなり簡単な質問で長時間苦労しています。リストには複数のタイプの構造体を含めることができるはずですが、各リストには1つのタイプの構造体しか含まれません。この問題は、getNode()関数を実装したいときに発生します。なぜなら、戻すべき構造体を指定する必要があるからです。構造体をクラスに置き換えようとしましたが、getNode関数は他のすべてのクラスによって継承される基本クラスを返しますが、コンパイラはgetNode関数が何も返さないようにするので、トリックは行いません。ベースクラス。C++での一般的なリンクリスト
だからここにいくつかのコードスニペットです:
typedef struct struct1
{
int param1;
(...)
} struct1;
typedef struct struct2
{
double param1;
(...)
} struct2;
typedef struct node
{
struct1 data;
node* link;
} node;
class LinkedList
{
public:
node *first;
int nbrOfNodes;
LinkedList();
void addNode(struct1);
struct1 getNode();
bool isEmpty();
};
LinkedList::LinkedList()
{
first = NULL;
nbrOfNodes = 0;
}
void LinkedList::addNode(struct1 newData)
{
if (nbrOfNodes == 0)
{
first = new node;
first->data = newData;
}
else
{
node *it = first;
for (int i = 0; i < nbrOfNodes; i++)
{
it = it->link;
}
node *newNode = new node;
newNode->data = newData;
it->link = newNode;
}
nbrOfNodes++;
}
bool LinkedList::isEmpty()
{
return !nbrOfNodes;
}
struct1 LinkedList::getNode()
{
param1 returnData = first->data;
node* deleteNode = first;
nbrOfNodes--;
if (nbrOfNodes)
first = deleteNode->link;
delete deleteNode;
return returnData;
}
だから、一つの文章に入れての質問は、以下の通りである:それはまたstruct2のために使用することができるように、私は上記のリンクリストクラスを調整するにはどうすればよいです、 struct2オブジェクト用の新しいほぼ同じリストクラスを作成する必要はありませんか?上で述べたように、LinkedListの各インスタンスは、struct1またはstruct2のどちらか一方のみを扱います。 ヒントやヘルプに感謝します
ノード・ポインタを無効にする*ノード・ポインタを無効にする* - それらを取り出したコードがそれらを知っている限り、特定の型を持つ必要はありません。ただキャストできます。 – Tim
テンプレート、テンプレート、テンプレート.. http://en.wikipedia.org/wiki/Template_metaprogramming –
可能な複製:http://stackoverflow.com/questions/4705714/c-generic-linked-list – kzh