C++ C++;本征移动阵列xd到矩阵xd
我想将类型为Eigen::ArrayXXd的数组移动(或交换)到Eigen::MatrixXd。 为了达到这个目的,我试着C++ C++;本征移动阵列xd到矩阵xd,c++,c++11,eigen,C++,C++11,Eigen,我想将类型为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
#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 I版本为3.2.0 beta1,使用gcc 4.8.0。从实验来看,矩阵和数组的移动语义似乎还没有实现。是这样吗
有什么方法可以安全移动(无需复制) 您不能强制移动某个对象。如果您尝试执行的操作没有移动构造函数/赋值运算符(并且我在其文档中没有看到Eigen具有移动感知的证据),那么您无法移动它们
移动不是魔法;它需要某个类型的作者的明确支持。谢谢,Eigen现在似乎不支持。那么,有没有一种方法可以在不复制的情况下安全地交换它们?实际上,我的矩阵太大了,我的内存太少了。@Sungmin:看看文档。如果有一个函数可以进行交换,它会这么说。据我从文档中了解,有一个从Arrayxd到MatrixXd的转换函数。两个不同矩阵之间的交换也是如此。所以我猜有一种方法可以交换Arrayxd和MatrixXd。顺便问一下,我怎么回答?有时我在写“@”时会看到一些ID的提示。现在并没有任何建议出现。@Sungmin当你们回复帖子的自动回复时,它是隐含的
Eigen::MatrixXd mat;
mat.swap(array.matrix()); (runtime error assert failure)
// swap(array.matrix(), mat); (compile error)