将Matrix :: row()的返回分配给Matrix <x,1,dynamic> </x,1,dynamic>

时间:2013-02-13 17:22:10

标签: c++ eigen

我正在编写一个方法,将一个行作为参数矩阵,例如:

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>&’

我理解这里的问题是我尝试将Matrix<float,1,Dynamic>的引用分配给ColXpr,这似乎没有效果。我可以解决&#34;通过传递值来解决问题,在这种情况下,我猜一个新的Matrix是以ColXpr作为参数构造函数构建的,一切正常。

我没有修改方法中的矩阵,因此传递值是“#34;可接受的&#34;”。但是,我想通过引用传递,以避免复制数据并提高性能。有没有办法从Matrix::row()返回到Matrix<datatype,1,Dynamic>&指定的任何内容?

1 个答案:

答案 0 :(得分:3)

这是不可能的,但有两种选择:

  1. 将您的功能模板设为Eigen manual中的解释。

  2. 如果您无法编写模板函数,那么devel分支中可用的Ref<>类就是正确的答案。基本上,它归结为:

    method(Ref<Matrix<float,1,Dynamic>, 0, InnerStride> rowMatrix);

    或const版本:

    method(const Ref<const Matrix<float,1,Dynamic>, 0, InnerStride<> >& rowMatrix);