gpt4 book ai didi

c++ - 用于类型转换空指针的类型/类 vector

转载 作者:行者123 更新时间:2023-11-28 08:16:42 33 4
gpt4 key购买 nike

我的程序目前根据以下内容对空指针 vector 使用类型转换:

(注意代码是“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
}
}

有没有什么方法可以用一个用于类型转换的简单数组来替换大量的案例 1、案例 2 等?因此代码看起来像这样(当然 TypeCastVector 必须更早创建并包含每个索引 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;
};

存储一个 BaseStorer* 数组,它们是 new TypeStorer<File_GUI>(new File_GUI(...)) .你的循环看起来像...

for (i=0;i<NObjects;i++)
{
baseStorerVector[i]->CallFunction();
}

关于c++ - 用于类型转换空指针的类型/类 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499656/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com