目前,我正在使用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 vec = {1,2,3};
但由于我不能通过std::initializer_list<double>到基地,我被困住了
我不想要的Vector vec = {{1,2,3}};。
有没有其他方法来处理这种情况(通过放弃initializer_list并使用完全不同的东西),或者我是否应该坚持使用initializer_list?
我认为intializer_list在运行时进行初始化,我从这里中读取它。有什么方法可以在编译时进行初始化吗?
发布于 2016-10-27 04:38:00
我修改了您的代码,这样它至少可以编译。希望它有帮助:
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}) {}
};另一方面,使用向量或列表作为可验证的名称并不好,因为这些是C++ STL中的容器名称。
https://stackoverflow.com/questions/40276098
复制相似问题