C++11 如何通过引用使用Eigen::Matrix

C++11 如何通过引用使用Eigen::Matrix,c++11,matrix,eigen,C++11,Matrix,Eigen,我有一个小问题,但我不知道如何解决它 让我们开始: 我需要使用多线程处理一个大的特征矩阵。 每个线程都需要访问矩阵。维度是在程序执行期间指定的,因此我必须在main()中声明它,而不是作为全局变量。我尝试了不同的解决方案,但没有成功。我搜索类似“通过引用传递”的东西,但我读到这种方法不适用于特征矩阵。 这里有一个小例子。有人能告诉我如何解决这个问题吗?程序需要快速,所以类似:-将矩阵保存在文件中,并在每个线程中读取文件,处理矩阵,将矩阵保存在文件中,从主线程重新读取文件-这不是最好的方法,我认为

我有一个小问题,但我不知道如何解决它

让我们开始: 我需要使用多线程处理一个大的特征矩阵。 每个线程都需要访问矩阵。维度是在程序执行期间指定的,因此我必须在main()中声明它,而不是作为全局变量。我尝试了不同的解决方案,但没有成功。我搜索类似“通过引用传递”的东西,但我读到这种方法不适用于特征矩阵。 这里有一个小例子。有人能告诉我如何解决这个问题吗?程序需要快速,所以类似:-将矩阵保存在文件中,并在每个线程中读取文件,处理矩阵,将矩阵保存在文件中,从主线程重新读取文件-这不是最好的方法,我认为…;)有人知道更好的解决方案吗? 谢谢

void calc() {
    // work on the Matrix
}

int main() {
    Eigen::Matrix<bool, a, b> Mat;
    // Start some thread(calc);
    cout << Mat;
}
void calc(){
//在矩阵上工作
}
int main(){
本征矩阵矩阵;
//开始一些线程(计算);

不能将特征矩阵作为参考传递

下面是一个工作示例:

#include <iostream>
#include <Eigen/Dense>

void calc(Eigen::MatrixXf& mat) {
    mat = Eigen::MatrixXf::Constant(mat.rows(), mat.cols(), 1.0);
}

int main() {
    Eigen::MatrixXf Mat;
    Mat = Eigen::Matrix4f::Identity();
    std::cout << Mat << std::endl;
    calc(Mat);
    std::cout << Mat << std::endl;
}

只需通过引用将
Mat
传递到
calc
,即使用类型
矩阵&
。您也可以全局声明它并调用
Mat.resize(rows,cols);
但这很难看。谢谢!!!它只需做一点小改动即可工作:这是使用线程的工作代码(使用-lpthread编译)问题是我在线程初始化中没有使用std::ref(Mat)
1 0 0 0    
0 1 0 0    
0 0 1 0    
0 0 0 1

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1