6

タイプ Eigen::ArrayXXd の配列を Eigen::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;
}

出力は、両方のサイズが 10000 であることを示しています。これは、配列がコピーされたことを意味します。コピーを避けるために、私も試しました、

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

テストした Eigen のバージョンは 3.2.0 beta1 で、gcc 4.8.0 が使用されました。実験から、行列と配列の移動セマンティックはまだ実装されていないようです。そうですか?

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

4

1 に答える 1

6

何かを強制的に動かすことはできません。Eigen に、実行しようとしている操作のムーブ コンストラクター/代入演算子がない場合 (そして、Eigen がムーブ対応であるという証拠はドキュメントにありません)、それらを移動することはできません。

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

于 2013-05-07T06:41:50.817 に答える