【发布时间】:2015-06-27 03:58:24
【问题描述】:
我正在尝试创建一个在库中使用的类,但我不确定它是否可以做到。此类的想法是提供在列表中插入、搜索和删除项目的方法,但我的主要问题是,由于我不知道要放置在列表中的对象的类型,所以我不知道如何使用它。我以为我可以放置一个 void 指针,然后让它指向一个结构,但我无法让它工作。
假设我的班级是这样的:
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 类型的结构。不过,我想让我的课程适用于任何类型的结构。 我不知道我是否准确地解释了我想要做什么,我尝试了几种方法,但都失败了。
如果我没有正确解释自己,我将发布我希望课程如何工作的代码
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) -
确实是模板。另外,尽量避免所有这些新的。 ListManager *工人;变为:ListManager 工作者;等等
-
为什么不直接使用优秀的
std::vector,或者std::list? -
使用
map或vector。如果您想隐藏实施细节,请为其创建一个类。