Я пытаюсь сделать класс для использования в библиотеке, и я не уверен, что его даже можно сделать. Идея этого класса заключается в том, чтобы предоставить методы для вставки, поиска и удаления элементов в списке, но моя основная проблема заключается в том, что, поскольку я не знаю тип объекта, который я хочу разместить в списке, я не знаю, как работать с ним. Я думал, что могу разместить указатель на пустоту, а затем указать на структуру, но я не смог заставить ее работать.Создание класса для представления интерфейса списков
Давайте предположим, мой класс что-то вроде этого:
class ListManager
{
private:
void* FirstItem;//This would point to the first item of the list
void* LastItem;//This would point to the last item of the list
public:
void AddItemToList(void* Item);
void RemoveItemFromList(void* Item);
}
Таким образом, идея была в том, что, с моей программы, я могу определить структуру, как
struct Employee
{
*char Name;
int Id;
int PhoneNumber;
}
И затем, используйте этот класса, чтобы иметь возможность добавлять/удалять сотрудников. Поэтому в этом случае указатели void * должны указывать на структуру типа Employee. Тем не менее, я хочу, чтобы мой класс работал для любого типа структуры. Я не знаю, правильно ли я объяснил, что хочу, я попробовал несколько способов сделать это и потерпел неудачу на всех из них.
Im собирается разместить код, как я хотел бы класс работать, если я нету объяснил себя правильно
ListManager *Worker;
Worker=new(ListManager);
Employee *Item;
Item=new (Employee);
Item->Id=126;
Item->PhoneNumber=42154872;
Worker->AddItemToList(Item);
/*At this point, FirstItem and LastItem should point to the Item i just created*/
Может кто-то мне точку в правильном направлении, как сделать работу класса с структуру, не зная тип структуры?
Заранее спасибо
вы смотрели на классы шаблонов ли? –
шаблоны, вероятно, то, что вы ищете. Вы сделали бы шаблонный класс с параметром шаблона 'T', и вместо использования' void * 'вы могли бы использовать правильные типы (например,' T') – user463035818
шаблонов. Также старайтесь избегать всех новых. ListManager * Рабочий; становится: ListManager worker; и т. д. –