如何初始化派生类的值?

时间:2016-10-27 04:25:52

标签: c++ c++11

目前我正在使用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吗?

我认为intializer_list在运行时进行初始化,我从here读取它。有没有办法在编译时进行初始化?

2 个答案:

答案 0 :(得分:3)

我修改了你的代码,至少它编译了。希望它有所帮助:

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中的容器名称。

答案 1 :(得分:1)

您可以将initializer_list<initializer_list<double>>传递给父matrix类:

Vector(std::initializer_list<double> list):matrix({list}){}