c++ - 从类模板继承的类的 vector

标签 c++ arrays templates inheritance

我有一个这样的模板类

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 );

...

Error E0312 "no suitable user-defined conversion from std::vector < DataHandler < DataType1 > * > to std::vector < DataHandler < BaseData > * >

我认为使用继承的真正原因是不需要转换。在 BaseData[] 数组中我可以存储 DataType1 吗? DataHandler 需要能够“处理”任何数据类型, 但在这种特定情况下,Factory 需要能够存储仅从 BaseData 继承的所有内容。 我究竟做错了什么?我该如何解决这个问题?

-编辑-

基本上我想要的是 DataHandler 只是一个基类,我需要创建继承自该基类的不同 DataHandler。

BaseData包含通用数据的基本操作,我需要创建其他继承自BaseData的数据类型

我最初的问题是,当我想使用 DataHandler 时,我就这样使用了它

DataType1* dataType = new DataType1();
handler->Start(dataType);


void DataHandler2::Start(DataBase* data)

     { 
    DataType1* newData= dynamic_cast<DataType1*>(data);
    }

在我的处理程序中,我总是必须进行动态转换,而且我必须在 DataHandlers 的每个函数中进行动态转换看起来真的很糟糕 我试图通过使用类模板来解决这个问题

最佳答案

尽管DataType1继承自 BaseData (前者的指针和引用可以隐式转换为指向后者的指针和引用),DataHandler<DataType1>DataHandler<BaseData>是不相关的类型。

您不能转换 DataHandler<BaseData>往返于 DataHandler<DataType1>不提供用户定义的转换。完成后,因为您无法定义从/到 std::vector<DataHandler<BaseData>> 的转换往返std::vector<DataHandler<DataType1>> ,您需要为这最后一步编写一个转换函数。

关于c++ - 从类模板继承的类的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317404/

相关文章:

c++运行带参数的.exe文件

c++ - 尽管随机初始化,但K均值聚类中心每次运行都相同

javascript - 如何使用lodash过滤数据

c++ - 如何在编译时推断嵌套std::vector的内部类型?

c++ - 使用标签调度时如何反转模板参数?

c++ - 在 C++ 中,greater_equal<double> 有一种函数类型<bool (double, double)>

c++ - 使用 Xerces C++ 计算/访问 DOMNode 子节点的最快方法

c++ - 在C++中初始化参数化类型的数组

javascript - 从对象数组中获取具有总和的不同项目

c++ - 是否可以简化这些 C++ 模板参数?