C++11 有没有办法修改特征切片?

C++11 有没有办法修改特征切片?,c++11,eigen3,C++11,Eigen3,我有一个特征::矩阵和我有一个函数,只需要一个3x3切片,并修改它 void ModifyBlock(Eigen::Matrix<double, 3, 3> & block){ // A stupid example block += Eigen::Matrix<double, 3, 3>::Identity(); } void ModifyBlock(特征::矩阵和块){ //愚蠢的例子 块+=特征::矩阵::标识(); } 无法传递原始矩阵的切

我有一个
特征::矩阵和我有一个函数,只需要一个3x3切片,并修改它

void ModifyBlock(Eigen::Matrix<double, 3, 3> & block){
   // A stupid example
   block += Eigen::Matrix<double, 3, 3>::Identity();
}
void ModifyBlock(特征::矩阵和块){
//愚蠢的例子
块+=特征::矩阵::标识();
}
无法传递原始矩阵的切片,因为以下代码无法编译:

int main(int argc, char *argv[]){
    const int M = 10;
    const int N = 20;

    Eigen::Matrix<double, M, N> matrix;
    // Initialize matrix
    ModifyBlock(matrix(vector<int>{1,3,7}, vector<int>{0,2,4});
    return 0;    
}

cannot bind non-const lvalue reference of type ‘Eigen::Matrix<double, 3, 3>&’ to an rvalue of type ‘Eigen::Matrix<double, 3, 3>
intmain(intargc,char*argv[]){
常数int M=10;
常数int N=20;
特征::矩阵;
//初始化矩阵
ModifyBlock(矩阵(向量{1,3,7},向量{0,2,4});
返回0;
}
无法将“Eigen::Matrix&”类型的非常量左值引用绑定到“Eigen::Matrix&”类型的右值
我想知道是否有办法做到这一点


在中,我找不到任何关于切片必须是常量引用的内容。

问题不在于切片不可写,而是无法将其转换为
Eigen::Matrix
的左值引用。使用C++11,您可以简单地将其作为右值引用模板传递:

template<class Derived>
void ModifyBlock(Eigen::MatrixBase<Derived> && block){
   // A stupid example
   block += Eigen::Matrix<double, 3, 3>::Identity();
}
模板
无效修改块(特征::矩阵基和块){
//愚蠢的例子
块+=特征::矩阵::标识();
}