将模板化对象指针存储在矢量中并通过基类指针进行访问
Storing templated object pointers in a vector and accessing through base class pointer
我正在尝试创建一个 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
?这是一回事。
相关文章:
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如果基类包含双指针成员,则派生类的构造函数
- 使用基类指针调用基类的值构造函数的语法是什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- 如何使用 std::make_shared 创建基类类型的智能指针?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 指向基类派生类的 std::unique_ptr 的指针
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- std::variant vs指向C++中异构容器基类的指针
- 模板化函数或具有指向基类的指针的函数
- 指向基类的唯一指针
- C++函数解析基类指针到派生类指针
- 指向基类的指针的 std::vector 的深层副本
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 无法从指针派生类转换为指针基类(多态性)
- 使用指针基类的=操作符的多态性