从类模板继承的类的向量
vector of class that inherits from class template
我有这样的模板类
template <class DatasetType>
class DataHandler
{
void Action(DatasetType* Test)
{
//
}
}
然后我需要将这个模板类存储在一个数组中
class Factory{
vector<DataHandler<BaseData>*> availableData;
void SetAvailableData(vector<DataHandler<BaseData>*> i_availableData)
{
this->availableData= i_availableData;
}
}
BaseData 是一个基类
class BaseData
{
virtual void HandleData() = 0;
}
我的问题是,当我尝试将某些内容放入继承 BaseData 的数组中时
class DataType1: public BaseData
{
void HandleData() override;
}
。
vector<DataHandler<DataType1>*> arrayWithData = vector<DataHandler<DataType1>*>();
factory->SetAvailableData(arrayWithData );
。
错误 E0312"没有合适的用户定义转换,从 std::vector
*> 到 std::vector *>
我认为使用继承的原因是不需要转换。在 BaseData[] 数组中,我可以存储 DataType1? 数据处理程序需要能够"处理"任何数据类型, 但在这种特定情况下,工厂需要能够存储仅从 BaseData 继承的所有内容。 我做错了什么?我该如何解决这个问题?
-编辑-
好吧,基本上我想要的是 DataHandler 只是一个基类,我需要创建从这个基类继承的不同 DataHandler。
BaseData包含泛型数据的基本操作,我需要创建从 BaseData 继承的其他数据类型
我最初的问题是,当我想使用DataHandler时,我就这样使用它
DataType1* dataType = new DataType1();
handler->Start(dataType);
void DataHandler2::Start(DataBase* data)
{
DataType1* newData= dynamic_cast<DataType1*>(data);
}
在我的处理程序中,我总是必须进行动态转换,而且我必须在DataHandler的每个函数中进行动态转换,这看起来非常糟糕 我试图使用类模板来解决这个问题
即使DataType1
继承自BaseData
(前者的指针和引用可以隐式转换为指针和对后者的引用),DataHandler<DataType1>
和DataHandler<BaseData>
也是不相关的类型。
如果不提供用户定义的转换,则无法将DataHandler<BaseData>
与DataHandler<DataType1>
相互转换。完成此操作后,由于您无法定义往返std::vector<DataHandler<BaseData>>
std::vector<DataHandler<DataType1>>
的转换,因此您需要为最后一步编写转换函数。
- 如何创建从同一类继承的不同对象的向量
- 继承层次结构并将元素添加到向量
- C++ 继承向量问题(无限循环+在其他类中使用向量的问题)
- 以支持继承的方式将自身shared_ptr添加到对象构造函数中的向量中
- 如何在具有继承C++的对象向量上使用基本函数
- 具有继承类和函数的抽象类写入单独的向量c++
- 继承向量/数组/列表并更改其大小
- 从类模板继承的类的向量
- 我可以push_back矩形形状到继承矩形形状的类的二维向量中吗?
- 比较从父类继承但存储在父类的向量中的类的对象类型
- 不同对象的向量,对象具有非继承函数
- "undefined reference to" 当我尝试继承向量类时
- 调用继承的向量元素的成员函数
- 提升精神继承的字符串属性填充<int> ASCII 字符中的向量
- 指向继承类对象 c++ 的指针向量
- 继承和 STL 向量
- C++:向量和类继承中的指针
- C++:从抽象指针向量中获取继承的类型
- 在(私有)继承向量<string>上获取迭代器
- 无虚或继承的多态向量