我正在尝试分配不同数据类型的数组,在运行时决定。请考虑以下内容,请原谅格式:
#include <iostream>
unsigned int Wlines;
class Cache_X_line //Datatype1
{ public:
unsigned int Tag;
};
class Cache_Y_line //Datatype2
{ public:
unsigned int lob;
};
class Cache_set
{ private:
unsigned int i;
public:
void **line; //Using void pointer
Cache_set(bool linetype)
{ if(Wlines!=0)
line= new void * [Wlines]; //array of void pointers
for(i=0;i<Wlines;i++)
{ if(linetype)
line[i]=new Cache_X_line; //allocating objects of datatype1
else
line[i]=new Cache_Y_line; //allocating objects of datatype2
}
}
};
int main()
{ cout<<"Enter Wlines:";
cin>>Wlines;
Cache_set Set(1); //Object having member that is allocated array of datatype1.
clog<<hex<<Set.((Cache_X_line *)line[i])->Tag; //PROBLEM: UNABLE TO TYPECAST, to access members of allocated object.
}
我能够分配datatype1 / datatype2的对象数组,在运行时决定数据类型。但我不知道如何进一步访问每个对象的成员。请帮忙。
答案 0 :(得分:3)
我能够分配datatype1 / datatype2的对象数组,在运行时决定数据类型。但我不知道如何进一步访问每个对象的成员。
我的建议:
创建一个公共基类,Cache_X_Line
和Cache_Y_Line
可以从中派生。确保基类至少有一个虚函数。在其他方面都无法虚拟化,使析构函数变为虚拟。
在void*
中存储指向基类的指针,而不是Cache_Set
。最好存储一个std::vector
智能指针,而不是存储原始指针。
使用指针时,请执行dynamic_cast
。当dynamic_cast
成功派生类型时,使用派生类型。