如何值初始化派生类

How to value initialize derived class?

本文关键字:派生 初始化 何值      更新时间:2023-10-16

目前我正在使用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}){}