移动支持 Eigen was submitted in this patch in 2011。但是我在Matrix头文件中找不到移动构造函数。此外,Eigen网页仍然具有列为"to do"项的移动语义。所有这些都表明该补丁尚未提交给发布版本
此测试程序证明移动构造函数使移动的对象保持不变。
#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 3.2.0?是否有工具或我应该手动修改文件。
有没有人有使用此补丁的经验?
答案 0 :(得分:5)
我不确定为什么你认为该功能已经“完成”:虽然提交了一个补丁,但该错误显然仍然是开放的,与您的经验一致,表明该补丁尚未合并到特征源树中
你的测试用例中也有一个错误:你似乎期望first
在移动后以某种方式“空”,但它将处于未指定的状态。虽然它确实从快速浏览一下补丁提交中看出人们可能期望实践中的“空”结果,但补丁中没有足够的上下文来真正知道移动对象将处于什么状态。所以,除非你有一些其他的信息来源,你的期望是有点没有根据的。