c ++中的通用链表

its*_*boy 1 c++ struct linked-list

我一直在苦苦挣扎太长时间,有一个关于如何在c ++中创建通用链表的相当简单的问题.该列表应该包含几种类型的结构,但每个列表只包含一种类型的结构.当我想实现getNode()函数[见下面]时出现问题,因为那时我必须指定它应该返回哪个结构.我试图用类替换结构,其中getNode函数返回一个由所有其他类继承的基类,但它仍然没有做到这一点,因为编译器不允许getNode函数返回除了基类然后.

所以这里有一些代码片段:

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;
}
Run Code Online (Sandbox Code Playgroud)

所以问题,用一句话来说,如下:我如何调整上面的链表类,以便它也可以用于struct2,而不必为struct2对象创建一个新的几乎相同的列表类?如上所述,LinkedList的每个实例只处理struct1或struct2.感谢提示或帮助

Alo*_*ave 10

在C++,std :: list中已经存在一个通用链接列表.它肯定会更有效率,应该足以满足您的使用需求.

如果您仍想创建自己的通用链接列表您应该考虑使用模板并创建链接列表的模板实现.

在c中,模板不可用,数据节点以void*指针的形式存储.它利用了void指针可以指向任何通用数据类型的事实,您也可以考虑这种方法.