对Eigen的移动支持于 2011 年在此补丁中提交。但是我在 Matrix 头文件中找不到移动构造函数。此外,Eigen 网页仍然将移动语义列为“待办事项”项。这一切都表明补丁还没有提交到发布版本
这个测试程序证明了移动构造函数没有改变被移动的对象。
#include <iostream>
#include <utility>
#include <eigen3/Eigen/Dense>
int main()
{
Eigen::VectorXd first = Eigen::VectorXd::Constant(3, 3.14);
std::cout << "first\n" << first << std::endl << std::endl;
Eigen::VectorXd other = std::move(first);
std::cout << "first\n" << first << std::endl << std::endl;
std::cout << "other\n" << other << std::endl << std::endl;
return 0;
}
输出是:
first
3.14
3.14
3.14
first
3.14
3.14
3.14
other
3.14
3.14
3.14
如何从Eigen 3.2.0 中的上述补丁中启用复制省略移动功能。?
编辑:
似乎 Eigen 类的移动语义没有任何问题。但是,只有默认的移动构造函数和移动赋值运算符。
提供显式移动构造函数和移动赋值运算符的补丁,可避免复制整个数据,但尚未合并到发布版本中。
我想知道:
如何将此补丁应用于 Eigen 3.2.0?是否有工具或者我应该手动修改文件。
有没有人有使用这个补丁的经验?