C++ 类型转换空指针的类型/类的向量
我有一个程序,目前使用typecast作为空指针向量,如下所示: (注意代码是“principal”,我已经删除了大部分不必要的内容C++ 类型转换空指针的类型/类的向量,c++,casting,vector,C++,Casting,Vector,我有一个程序,目前使用typecast作为空指针向量,如下所示: (注意代码是“principal”,我已经删除了大部分不必要的内容 for (i=0;i<NObjects;i++) { switch (ObjectTypes[i]) { case 1: ((File_GUI*) (NullVector[i]))->function(); break; case 2: ((Point_GUI*) (Nu
for (i=0;i<NObjects;i++)
{
switch (ObjectTypes[i])
{
case 1:
((File_GUI*) (NullVector[i]))->function();
break;
case 2:
((Point_GUI*) (NullVector[i]))->function();
break;
case 3....etc
}
}
for(i=0;iffunction();
打破
案例2:
((Point_GUI*)(NullVector[i])->function();
打破
案例3……等等
}
}
有没有办法用一个用于类型转换的简单数组替换大量的案例1、案例2等?因此代码看起来是这样的(当然,TypeCastVector必须更早创建,并且包含每个索引i的数据类型:
for (i=0;i<NObjects;i++)
{
((typeCastVector[i]*) (NullVector[i]))->function();
}
for(i=0;iffunction();
}
如果可能的话,这将为我节省大量的代码行。我的观点与评论中提到的相同。目前您的
ObjectTypes[]
似乎是一个数组(或vector
ofint
s)。您可能希望将其更改为公共基类的指针(句柄)数组。例如
GUI *ObjectTypes[NObjects];
其中,类
层次结构类似
class GUI { // abstract base class
public:
virtual void function () = 0; // make it an abstract method
};
class File_GUI : public GUI {
void function () { ... }
};
...
现在您可以在一条线路中替换您的呼叫,如下所示:
for (i=0;i<NObjects;i++)
{
ObjectTypes[i]->function();
}
for(i=0;iffunction();
}
我同意Kerrek SB的观点,可能需要重新设计,以便为此使用虚拟函数调用和基类。如果出于某种原因,您确实不想为File\u GUI、Point\u GUI等提供基类,您可以这样做
struct BaseStorer
{
virtual void CallFunction() = 0;
};
template<typename T>
struct TypeStorer : public BaseStorer
{
TypeStorer(T* _obj) : obj(_obj) {}
virtual void CallFunction() { obj->function(); }
T* obj;
};
struct BaseStorer
{
虚空调用函数()=0;
};
模板
结构类型存储器:公共BaseStorer
{
类型存储器(T*_obj):obj(_obj){}
虚空调用函数(){obj->function();}
T*obj;
};
存储一个BaseStorer*数组,它们是新类型存储器(新文件\u GUI(…)
for (i=0;i<NObjects;i++)
{
baseStorerVector[i]->CallFunction();
}
for(i=0;iCallFunction();
}
可能需要进行重大的重新设计,以避免空指针向量。为什么不使用基类指针向量并调用虚拟函数调用?您可以对空指针执行哪些有用的操作?充其量->
会出现seg-fault。您不能对空指针调用函数,那么这到底是做什么的,又是做什么的是该向量的内容吗?为什么该向量不包含指向具有虚函数()的基类的指针你为什么要用C风格的演员来代替C++的演员?为什么你要用魔术数字代替EnMe?谢谢大家。很显然我走错了方向,必须做一些研究,然后改变方向。无论如何,谢谢你花时间。/史蒂芬谢谢你的输入戴夫。