从Eigen的signiture of the row() function看来,它不是multi show-env ( | () where ? $*DEBUG ) { dd %*ENV }
multi show-env ( | () where ! $*DEBUG ) { True }
所以你无法在const引用上调用此函数,例如const
const Matrix& x
是不允许的。
如果我需要const方法来获取,那么最佳做法是什么? 第i行x?
你知道为什么不是x.row(i);
函数const?
row()
免责声明:我的问题非常明显,对于经验丰富的typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;
void func(const Matrix& x) {
// Something something
x.row(i); // Error: Non-const function row called on const object
// Something something
}
开发者来说,可能需要2秒钟,请向平庸道歉。如果你确信答案是显而易见的,请随意关闭帖子。我在没有人知道答案的情况下尝试了C ++聊天。
答案 0 :(得分:1)
你必须使用一个过时的一个破碎的Eigen版本。以下代码与Eigen 3.3编译得很好。
:help virtcol()
顺便说一句,在任何情况下都不会
#include <Eigen/Core>
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> Matrix;
void func(const Matrix& x) {
x.row(0);
}
int main() {
Matrix m = Matrix::Random(2,2);
func(m);
}
这会调用未定义的行为! void func(const Matrix& x) {
const_cast<Matrix&>(x).whatever();
}
存在的唯一原因是与传统的C接口兼容,其中可能不存在const正确性。永远不要抛弃constness来调用const对象的const成员函数。