用于类型转换空指针的类型/类的向量
vector of type/class for typecasting null pointer
我有一个程序,目前使用类型转换为一个空指针向量根据以下:
(注意代码是"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
}
}
是否有任何方法可以用用于类型转换的简单数组替换大量的case 1, case 2等?因此,代码看起来像这样(当然,typeecastvector必须更早创建,并包含每个索引的数据类型i:
)for (i=0;i<NObjects;i++)
{
((typeCastVector[i]*) (NullVector[i]))->function();
}
如果可能的话,这将节省大量的代码行。
我同意Kerrek SB的观点,可能需要重新设计,以便使用虚函数调用和基类来实现此目的。如果出于某种原因你真的不想给File_GUI, Point_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;
};
存储一个数组的basestover *是new TypeStorer<File_GUI>(new File_GUI(...))
。你的循环看起来像…
for (i=0;i<NObjects;i++)
{
baseStorerVector[i]->CallFunction();
}
我的观点与评论中提到的相同。目前,您的ObjectTypes[]
似乎是一个数组(或int
s的vector
)。您可能想将其更改为一个公共基础class
的指针(句柄)数组。例如,
GUI *ObjectTypes[NObjects];
其中class
层次结构为
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();
}
相关文章:
- C++中函数的向量返回类型引发错误
- 具有 STL 向量类型成员的类的复制内存
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 是否可以有一个模板函数,可以将向量和非向量类型都作为参数
- 具有基元类型的模板向量类型
- 在索引和值类型上参数化的惯用向量类型
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- 通过glUniform 将 GLM 的向量类型传递给 OpenGL
- 尝试将用户定义的向量类型插入用户定义的类型向量
- 使用类作为向量类型时出错 - "Undeclared identifier"
- 在C++中,当两个向量类型不同时,如何将值存储到向量内部的向量中
- 如何访问和存储向量类型的结构成员
- 按参数中的向量类型重载函数
- boost::variant:具有递归向量类型的奇怪行为
- LLVM 传递计数向量类型指令
- 用异构boost::融合向量类型数据填充std::vector
- 如何定义自定义类的向量类型
- 真正的动态向量类型
- 如何在类的属性/变量中使用组合类作为向量类型
- 更快地删除向量类型