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 回答