Hua*_*ham 6 reference function block lvalue eigen
我试图返回一个矩阵块作为函数的左值.假设我的函数看起来像这样:
Block<Derived> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}
Run Code Online (Sandbox Code Playgroud)
事实证明,似乎C++编译器的理解是块()算子仅给出临时值等返回它作为一个左值是由编译器禁止.然而,本征文档中有一些例子,我们可以使用本征作为左值(http://eigen.tuxfamily.org/dox/TutorialBlockOperations.html#TutorialBlockOperationsUsing),所以我想知道我们怎么也做相同的功能返回.
a.block(0,0,2,3) = a.block(2,1,2,3);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想把我发现自己的东西放在一起,这样对其他人可能会有所帮助:
我的基本解决方案是知道你想要块的派生类型.在这种情况下:
Block<MatrixXd> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}
Run Code Online (Sandbox Code Playgroud)
有趣的是我注意到这个方法默认会返回对矩阵m的内容的引用.所以如果我们这样做:
MatrixXd m = MatrixXd::Zero(10,10);
Block<MatrixXd> myBlock = getBlock(m, 1, 1, 3, 3);
myBlock << 1, 0, 0,
0, 1, 0,
0, 0, 1;
Run Code Online (Sandbox Code Playgroud)
矩阵m中的内容也将被修改.但请注意,
MatrixXd m = MatrixXd::Zero(10,10);
MatrixXd myBlock = getBlock(m, 1, 1, 3, 3);
myBlock << 1, 0, 0,
0, 1, 0,
0, 0, 1;
Run Code Online (Sandbox Code Playgroud)
不管用.我的理解是,一旦我们将块转换为另一种类型,Eigen会在转换之前复制数据.
归档时间: |
|
查看次数: |
3879 次 |
最近记录: |