Реализация списка с элементами определенного типа c - PullRequest
0 голосов
/ 14 июля 2020

Я пишу реализацию двусвязного списка, и у меня проблемы с добавлением в него элементов ...
Сам элемент выглядит так:
typedef struct list_item {
  struct list_item* next; //указатель на следующий элемент
  struct list_item* prev; //указатель на предыдущий элемент
  void* data_ptr; //указатель на данные
  size_t data_size; //размер данных
} list_item_t;

А вот функция, которая добавляет новый элемент с данными:

void list_add_data(list_t* list, void* data, size_t data_size);

Проблема в том, что я не могу добавить к нему, например, числа 10 и 12, поэтому мне нужно сделать что-то в стиле:

int num = 10;
int num2 = 12;
list_add_data(&list, &num, sizeof(int));
list_add_data(&list, &num2, sizeof(int));

или

int* num = malloc(sizeof(int));
*int = 10;
list_add_data(&list, num, sizeof(int));
num = malloc(sizeof(int));
*int = 12;
list_add_data(&list, num, sizeof(int));

И если вам нужно добавить несколько значений, вам нужно создать отдельную переменную для каждого значения или выделить память и отслеживать ее. Очевидно, что это не работает.

Я мог бы создать отдельную функцию для всех типов, например, void list_add_int(list_t* list, int data);, которая будет выделять память для числа и сохранять ссылку, но в этом случае для каждого возможного типа Я должен создать отдельный экземпляр функции, это тоже не решение.

Могу ли я сделать что-то похожее на типы данных в C ++? Что-то похожее на vector<int> vec; и простые функции, которые будут работать с элементами того типа, который требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...