我的问题是,我必须找到一种方法来轻松维持下一个情况: 我有一个不同类的链表。我使用void指针,每个类都有“int type”作为它的第一个成员。
现在,当我想调用类成员函数时,我必须这样做: - 读取int,所以我知道类的类型。 - 我用类型信息调用泛型函数,并调用“函数”信息来知道要调用哪个类成员函数。
所以它基本上是一个像这样的开关盒中的开关盒:
void command(void *&pointer, int type, int function)
{
switch (type)
{
case 1:
switch (function)
{
case 1:
reinterpret_cast<myClass *>(pointer)->doSomething();
}
}
}
当一个函数(如“doSomething()”需要一些参数时,我甚至不知道该怎么做。
无论如何,它总是一团糟。我相信有比这更好的方法,但不知道它是什么。
有人想开导我吗?
答案 0 :(得分:2)
Virtual functions是专门发明的,因此您无需切换类型。
答案 1 :(得分:2)
如果您发现自己编写的代码如果“如果A是X类型,然后执行某些操作,如果它是Y类型,那么执行其他操作”,那么您很可能能够使用多态:引入抽象基础那些人。
然后,您将获得该抽象基类的对象列表,并在每个对象上调用一个虚方法。每个类都以自己的方式实现它,因此不需要case
和铸造。这通常是最好的解决方案。
但是,如果没有您更详细地描述您的情况,我唯一可以告诉您的是:“重新思考您的课堂设计,因为您可能会遇到一些逻辑错误而且您的问题可能是由于那些”。
答案 2 :(得分:1)
使用标题std::list
中的<list>
。
或者可能实际上某些其他容器可能更合适,但您没有提供问题的详细信息。
无论如何,当你作为初学者觉得需要使用void*
时,你知道你做的事情非常错误 - 不要。
干杯&amp;第h。,
答案 3 :(得分:1)
如果您的可能容器元素类型列表有限(似乎可能给出了您计划使用的类型 - &gt;值映射),则可以实现Boost Variants的容器。这比蛮力型更好 - &gt;您目前希望需要的值映射和转换。
在不了解对象的内容的情况下,很难确定这会起作用。