2016-05-11 40 views
0

私は現在EigenとC++で作業していますが、初期化については答えが見つからないことがいくつかあります。Eigenは行列から初期化する

は、同じサイズの別の動的なマトリックスを使用した動的行列を初期化することが可能です:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix) 
} 

上記コンパイルするようだが、私はそれをテストすることはできませんので、私のプロジェクトは、現在、他のコンパイルエラーで満たされています私はそれを使用する前に何をするのかを確認したいと思います。これによりdestMatrixの深いコピーがsourceMatrixになりますか?または浅いコピー?

は、それが行うよりも何が違うのです:

MyClass::MyClass(Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> sourceMatrix) 
{ 
    Eigen::Matrix<T, Eigen::Dynamic, Eigen Dynamic> destMatrix(sourceMatrix.data()) 
} 

答えて

3

それは深いコピーを行います、またsourceMatrixはおそらくconst参照として宣言する必要があります。あなたは浅いコピーをしたい場合は、それが明示的に使用するために要求する必要があり、例えば、Ref対象:

Ref<MatrixXd> dest(source); 

は詳細および例についてEigen::Refのドキュメントを参照してください。

+0

ありがとうggael! –

関連する問題