作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将矩阵 block 作为函数的左值返回。假设我的函数如下所示:
Block<Derived> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}
事实证明,C++ 编译器似乎理解 block() 运算符仅提供临时值,因此编译器禁止将其作为左值返回。然而,在 Eigen 文档中有一些例子,我们可以使用 Eigen 作为左值(http://eigen.tuxfamily.org/dox/TutorialBlockOperations.html#TutorialBlockOperationsUsing),所以我想知道我们如何不能对函数做同样的事情返回。
a.block(0,0,2,3) = a.block(2,1,2,3);
谢谢!
最佳答案
我想把我自己发现的东西写下来,这样可能对其他人有帮助:
我的基本解决方案是了解您想要 block 的派生类型。在这种情况下:
Block<MatrixXd> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
return m.block(i,j,row,column);
}
有趣的是我注意到这个方法默认会返回对矩阵 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;
矩阵 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;
不会工作。我的理解是,一旦我们将 block 转换为另一种类型,Eigen 就会在转换之前复制数据。
关于function - 特征库 : return a matrix block in a function as lvalue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548253/
我是一名优秀的程序员,十分优秀!