下面的例子可以很好地初始化向量的向量:
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类的功能。
我构造向量的一般向量的方法有问题吗?
如果这是好的,我如何简洁地静态初始化这个数据结构的一个实例,就像我的开始的例子一样?
在模板中使用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 });
}