提问者:小点点

如何初始化向量模板子类


下面的例子可以很好地初始化向量的向量:

using DataElement = std::vector<double>;
using DataVector = std::vector<DataElement>;

DataVector data;
data.emplace_back(DataElement{ 1.0f, 1.0f });
data.emplace_back(DataElement{ 1.1f, 1.1f });

现在我想使DataElement的类型成为泛型,因此我尝试了以下模板方法:

template <typename T>
class DataElement : public std::vector<T> {};

template <typename T>
class DataVector : public std::vector<DataElement<T>>{};

DataVector<double> data;
data.emplace_back(DataElement<double>{ 1.0f, 1.0f });
data.emplace_back(DataElement<double>{ 1.1f, 1.1f });

但这会在emplace_back行上生成初始化错误:不存在合适的构造函数来从“float”转换为“std::vector

我对vector进行了子类化,因为这似乎是将它包装在模板中的正确方法,但是由于任何其他原因,我不需要对vector进行子类化,也就是说,我不需要扩展vector类的功能。

我构造向量的一般向量的方法有问题吗?

如果这是好的,我如何简洁地静态初始化这个数据结构的一个实例,就像我的开始的例子一样?


共1个答案

匿名用户

在模板中使用using

#include <vector>

template <typename T>
using DataElement = std::vector<T>;

template <typename T>
using DataVector = std::vector<DataElement<T>>;

int main()
{
    DataVector<double> data;
    data.emplace_back(DataElement<double>{ 1.0f, 1.0f });
    data.emplace_back(DataElement<double>{ 1.1f, 1.1f });
}