2013-05-07 13 views
5

Eigen :: ArrayXXd型の配列をEigen :: MatrixXdに移動(または入れ替える)したいと思います。 は、これを達成するために、私は、出力の両方のサイズが配列のコピーされた意味し、10000であることを示しているC++ Eigen arrayXXdをMatrixXdに移動

#include <iostream> 
#include <Eigen/Dense> 
using namespace std; 
int main(int , char**) { 
    Eigen::ArrayXXd array(100,100); 
    auto mat2 = std::move(mat.matrix()); 
    cout << array.size() << endl; 
    cout << mat.size() << endl; 
} 

、試みました。コピーを避けるために、私も試した 、

Eigen::MatrixXd mat; 
    mat.swap(array.matrix()); (runtime error assert failure) 
// swap(array.matrix(), mat); (compile error) 

私がテストした固有のバージョンは3.2.0ベータ1であるとgcc 4.8.0を使用しました。実験から、行列と配列の移動意味はまだ実装されていないようです。そうですか?

安全に移動できる方法はありますか(コピーなし)?

答えて

3

何か移動することはできません。 Eigenがあなたがしようとしている操作のための移動コンストラクタ/代入演算子を持っていない場合(そして私はEigenがドキュメント内で移動を認識しているという証拠は見当たりません)、それらを移動することはできません。

移動は魔法ではありません。あるタイプの作家による明示的なサポートが必要です。

+0

ありがとう、エイゲンは今サポートしていないようです。それでは、コピーせずに安全に交換できる方法はありますか?実際、私の行列は非常に大きいので、私は記憶の不足に苦しんでいます。 – Sungmin

+0

@Sungmin:ドキュメントを見てください。スワッピングを実行する機能があれば、そのように言います。 –

+0

私がこの文書からわかるように、ArrayXXdからMatrixXdへの変換機能があります。 2つの異なるMatrixXdの間で交換が行われます。だから私はArrayXXdとMatrixXdを交換する方法があると思った。 – Sungmin