继承自类模板

时间:2018-01-18 09:06:23

标签: 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 );

...

  

错误E0312&#34;没有合适的用户定义的转换来自std :: vector&lt; DataHandler&lt; DataType1&gt; *&gt;到std :: vector&lt; DataHandler&lt; BaseData&gt; *&gt;

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

-edit -

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

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

我最初的问题是,当我想使用DataHandler时,我一直使用它

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


void DataHandler2::Start(DataBase* data)

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

在我的处理程序中我总是不得不进行动态转换,看起来非常糟糕,我必须在DataHandlers的每个函数中进行动态转换 我尝试使用类模板

来解决这个问题

1 个答案:

答案 0 :(得分:2)

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

如果不提供用户定义的转化,则无法将DataHandler<BaseData>转换为DataHandler<DataType1>。完成此操作后,由于您无法定义从/ std::vector<DataHandler<BaseData>>到/ std::vector<DataHandler<DataType1>>的转换,因此您需要为最后一步编写转换函数。