2016-10-27 5 views
1

現在、マトリックスクラスを初期化するのに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};

が、私は私はしたくない

Vector vec = {{1,2,3}};で立ち往生していますベースにstd::initializer_list<double>を渡すことはできませんので、。

この状況を処理する方法はありますか(initializer_listを削除して全く別のものを使用します)、またはinitializer_listを付ける必要がありますか?

私はintializer_listが実行時に初期化を行うと思いますが、私はhereから読みます。コンパイル時に初期化を行う方法はありますか?

答えて

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}) {} 
}; 

ではなく、これらはC++ STLコンテナ名であるとして、veriable名としてベクトルまたはリストを使用するには、その良いアイデアではない:それがお役に立てば幸いです。

+0

だから私はこれを試して、それは動作します!私はこれが実行時の初期化されていることを知っている..あなたはどのようにコンパイル時にこの初期化を行う任意のリソースを指すことができますか?コンパイル時の初期化がこの方法で可能かどうかはわかりませんが、ちょうど興味がありました – pokche

+1

@pokcheわかりません。たぶんテンプレート付きのもの。 – Marcin

1

あなたは親matrixクラスにinitializer_list<initializer_list<double>>を渡すことができます。

Vector(std::initializer_list<double> list):matrix({list}){} 
関連する問題