Я слишком долго боролся с довольно простым вопросом о том, как создать общий связанный список в 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;
}
Итак, вопрос, заключенный в одно предложение, состоит в следующем: Как настроить вышеупомянутый класс связанного списка так, чтобыэто также может быть использовано для struct2, без необходимости создавать новый почти идентичный список класса для объектов struct2?Как я сказал выше, каждый экземпляр LinkedList будет иметь дело только с struct1 или struct2.Благодарен за подсказки или помощь