我正在编写一个将行矩阵作为参数的方法,例如:
method(Matrix<float,1,Dynamic>& rowMatrix);
如果我尝试使用 Matrix.row(x) 的结果调用该方法,例如:
Matrix<float,Dynamic,Dynamic> matrix(2,2);
method(matrix.row(1));
我收到以下错误:
no known conversion for argument 1 from ‘Eigen::DenseBase<Eigen::Matrix<float, -1, -1> >::ColXpr {aka Eigen::Block<Eigen::Matrix<float, -1, -1>, -1, 1, true, true>}’ to ‘Eigen::Matrix<float, -1, 1>&’
我知道这里的问题是我正在尝试分配对 a 的引用Matrix<float,1,Dynamic>
,ColXpr
这似乎无效。我可以通过按值传递来“解决”问题,在这种情况下,我猜想构造一个新的 Matrix 并使用ColXpr
as 参数构造函数,并且一切正常。
我没有修改方法内部的矩阵,所以按值传递是“可以接受的”。但是,我想通过引用传递以避免复制数据并提高性能。有什么方法可以从 return 转换Matrix::row()
为任何可分配给的东西Matrix<datatype,1,Dynamic>&
?