C++ 类型转换空指针的类型/类的向量

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

我有一个程序,目前使用typecast作为空指针向量,如下所示:

(注意代码是“principal”,我已经删除了大部分不必要的内容

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
of
int
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?谢谢大家。很显然我走错了方向,必须做一些研究,然后改变方向。无论如何,谢谢你花时间。/史蒂芬谢谢你的输入戴夫。