如何通过引用将特征矩阵 A 传递给函数,然后窃取 A 的所有权?
我正在为 Python 编写一个 C++ 扩展,它接受两个std::vector<Eigen::Ref<Mat> >
并返回一个std::vector<Mat>
. 返回向量的每个元素可以是输入向量中引用的新矩阵或旧矩阵。
Eigen::Ref
来自 pybind11 的示例在此处(pybind11 doc)提到了 C++ 和 Python 之间的传递引用。
我尝试修改一个示例(来自旧的错误报告)。但是源没有移动到目标。这是因为源矩阵最后不是空的。
测试:
#include <iostream>
#include <eigen3/Eigen/Dense>
typedef Eigen::MatrixXd Mat;
Mat func(Eigen::Ref<Mat> ref) {
Mat target(std::move(ref));
return target;
}
int main() {
const std::size_t n = 2;
Mat source = Mat::Zero(n, n);
Mat target = func(source);
std::cout << "source\n" << source << "\n";
std::cout << "target\n" << target << "\n";
return 0;
}
结果:
source
0 0
0 0
target
0 0
0 0