如何值初始化派生类
How to value initialize derived class?
目前我正在使用std::initializer_list<std::vector<double>>
来初始化我的矩阵类。
class matrix{
public:
matrix(std::initializer_list<std::vector<double>> list: row(list.size(),
col((*list.begin()).size()), matrix(list){}
private:
std::vector<std::vector<double> matrix; // I am planning to use single contiguous memory in future
};
这允许我值初始化矩阵
matrix mat = {{1,2,3},{4,5,6}};
现在我用矩阵来创建向量(数学)
class Vector: public Matrix{
Vector(std::initializer_list<double> list):Matrix(list){}
// Vector(std::initializer_list<std::vector<double>> list):Matrix(list){}
};
我想对Vector做的是
Vector vec = {1,2,3};
但由于我不能通过std::initializer_list<double>
到基地,我被困在
Vector vec = {{1,2,3}};
,我不想要。
是否有其他方法来处理这种情况(通过删除initializer_list和使用完全不同的东西),或者我应该坚持使用initializer_list?
我认为initializer_list在运行时进行初始化,我从这里读到它。有没有一种方法,我可以在编译时做初始化?
我修改了你的代码,这样至少它可以编译。希望能有所帮助:
class Matrix {
public:
Matrix(std::initializer_list<vector<double>> _list):
row(_list.size()), col((*_list.begin()).size()), m_matrix(_list){}
private:
size_t row, col;
std::vector<std::vector<double>> m_matrix; // I am planning to use single contiguous memory in future
};
class MyVector: public Matrix{
public:
MyVector(std::initializer_list<double> _list): Matrix({_list}) {}
};
作为一个方面,使用vector或list作为变量名不是一个好主意,因为它们是c++ STL中的容器名。
您可以将initializer_list<initializer_list<double>>
传递给父matrix
类:
Vector(std::initializer_list<double> list):matrix({list}){}
相关文章:
- 何时为派生类初始化 vptr?
- 初始化派生结构的基部分/意外打包派生结构字段以对齐基结构的间隙
- 为什么基类数据在派生类数据之前初始化
- C++初始化之前派生类调用基类的方法
- std::数组派生类聚合初始化
- 如何使用派生类类型数据初始化 std::shared_ptr?
- 将已初始化的基类分配给派生类
- 在派生类的构造函数初始化中无法访问受保护的函数
- OOP - 抽象类类型,初始化基类和派生类中的变量
- C :适当的格式以初始化派生和基础
- 初始化 MFC 中 CFormView 派生类的成员数据
- 派生类的聚合初始化
- 初始化基类和派生类中的类成员变量
- C++派生类的初始化列表
- C++ - 在派生类中静态初始化受基类保护的成员变量
- 为什么派生类成员的初始化值在转换为基指针时不会丢失?
- 如何在派生类中初始化继承的模板POD结构
- 如何在 switch 语句中正确初始化不同的派生类
- 如何在派生构造函数的大括号中初始化基构造函数?C++
- 用派生的类构造函数初始化对象