如何初始化矢量的模板化子类
How to initialise a templated sub-class of vector
以下示例初始化向量可以正常工作:
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
行上生成初始化错误:no suitable constructor exists to convert from "float" to "std::vector<double, std::allocator<double>>
我对向量进行了子类化,因为这似乎是将其包装在模板中的正确方法,但由于任何其他原因,即我不需要扩展向量类功能,因此我不需要子类。
我构建向量的通用向量的方式有问题吗?
如果没问题,我如何根据我的开头示例简洁地静态初始化此数据结构的实例?
将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 });
}
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 何时为派生类初始化 vptr?
- 虚拟基类初始化
- 类初始化中的静态 lambda
- C++ 使用向量进行类初始化
- 您可以在类初始化器列表中定义数组大小吗?
- C++11 成员类初始化顺序
- 大括号使用枚举类初始化静态常量unordered_map
- 类初始化中的指针初始化
- Arduino 类初始化执行
- 为什么我们需要模板 <int N>,因为我们有类初始化
- 如何将指针声明以在类初始化器中的成员功能并拨打这些指针
- 如何防止在基类初始化器中调用默认构造函数?
- 为什么"new"在类初始化中失败
- 从模板类初始化对象时出错.参考类模板实例化
- 如何将断言放在类初始化列表之前
- 使用不同的类初始化对象
- 类初始化的const参考
- 使用MSVC 2013的类初始化器中的C++11
- 如何在派生类中存储基类初始化期间获得的信息