Привет.
Я пишу реализацию двусвязного списка и у меня возникли проблемы с добавлением туда элементов...
Сам элемент выглядит так:
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;
и простых функций которые будут работать с элементами того типа, который требуется.