将模板化对象指针存储在矢量中并通过基类指针进行访问

Storing templated object pointers in a vector and accessing through base class pointer

本文关键字:指针 基类 访问 对象 存储      更新时间:2023-10-16

我正在尝试创建一个 2D 动态数组,其中每一行都对应于不同数据类型的列表。为此,我使用了一个指针向量,其中每个指针都指向某种类型的一维数组。为了创建一个泛型数组,我创建了一个从抽象类派生的模板类,以便我可以在我的 array(12009314) 中使用抽象类指针。以下是我尝试执行此操作的代码,但问题是由于我在抽象类中没有数组指针,因此我无法访问数组元素:

class abs_attribute{
public:
virtual void insertAttribute(abs_attribute* a){}
virtual void print(){}
};
template <class T>
class attribute:public abs_attribute{
public:
T *data;
int size;
attribute(int s=3){
size=s;
data=new T[size];
}
void print(){
for(int i=0;i<size;i++)
cout<<data[i]<<" ";
cout<<"n";
}
};
class Graph{
private:
vector<abs_attribute*>Attribute;
public:
Graph(){}
void insertAttribute(abs_attribute* a){
Attribute.push_back(a);
}

void printAttributes(){
for(int i=0;i<Attribute.size();i++){
for(int j=0;j<N;j++){
cout<<Attribute[i]->data[j]<<" ";//Not able to access data as it is not a member of abs_attribute
}
cout<<endl;
}
}
};
int main(){
abs_attribute* age=new attribute<int>(N);
age=new attribute<int>(N);
for(int i=0;i<N;i++)
static_cast<attribute<int>*>(age)->data[i]=rand()%50;

age->print();
Graph g;
g.insertAttribute(age);
g.printAttributes();
}

有没有办法在事先不知道派生类的模板类型的情况下访问 Graph 类内的数据数组? 整个活动的主要目的是在我的类中拥有多个不同数据类型的数组。由于我无法将数据成员动态添加到类中,因此我求助于一个向量,在该向量中,我将不断推送数组指针,但由于数组元素是泛型的要求,此方法变得复杂。

你不能神奇地做到这一点。对象类型必须以某种方式传递/已知/使用。

在你的main()中,你有这样一行:

static_cast<attribute<int>*>(age)->data[i]=rand()%50;

看看您必须如何static_cast才能访问data?这是一回事。