2013-02-13 82 views
1

我正在寫帶一個參數行矩陣,如方法:如果我嘗試用結果來調用方法矩陣分配返回::行()在矩陣<X,1,Dynamic>

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,這看起來沒有效。我可以通過傳遞值來「解決」問題,在這種情況下,我猜想構建了一個新的Matrix,並將ColXpr作爲參數構造函數,並且一切正常。

我沒有修改方法內部的矩陣,所以按值傳遞是「可接受的」。但是,我想通過引用來避免複製數據並提高性能。有沒有什麼辦法可以將Matrix::row()歸還給Matrix<datatype,1,Dynamic>&

回答

3

這是不可能的,但有兩個選項供您:

  1. 讓你的函數模板在本徵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);

+0

謝謝,你一定會指出我到正確的方向 – pgilmon 2013-02-15 10:07:47

+0

其實,在你做參數常量我認爲你不需要使用參考(至少它在我的情況下沒有它)。 – pgilmon 2013-02-15 10:14:53

+0

當然,它會工作,但它會引入一個臨時和副本。 – ggael 2013-02-15 12:36:03