我有这样的模板类

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吗?
DataHandler需要能够“处理”任何数据类型,
但是在这种特定情况下,Factory需要能够存储仅继承自BaseData的所有内容。
我究竟做错了什么?我该如何解决?

-编辑-

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

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

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

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


void DataHandler2::Start(DataBase* data)

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


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

最佳答案

即使DataType1BaseData继承(并且前者的指针和引用可以隐式转换为后者的指针和引用),但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/

10-11 01:10