【发布时间】:2018-01-28 02:46:26
【问题描述】:
如何通过引用将特征矩阵A传递给函数,然后窃取A的所有权?
我正在编写一个 Python 的 C++ 扩展,它接收两个 std::vector<Eigen::Ref<Mat> > 并返回一个 std::vector<Mat>。返回向量的每个元素可以是输入向量中引用的新矩阵或旧矩阵。
来自 pybind11 的示例在此处使用 Eigen::Ref (pybind11 doc) 提到了 C++ 和 Python 之间的 pass-by-reference。
我尝试修改一个示例(来自old bug report)。但是源没有移动到目标。这是因为源矩阵最后不是空的。
测试:
#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
【问题讨论】:
标签: python c++ move-semantics eigen3 pybind11