引用变量作为函数和线程的参数

时间:2013-06-27 15:15:37

标签: c++ multithreading c++11 reference stdvector

我有一个函数,我想传递对向量的引用作为参数。

void function(std::vector<double>& datavector)
{
}

man函数看起来像这样:

int main(int argn, char** argv)
{
    // Create a vector containing 12 variables
    std::vector<double> data;
    for(uint32_t i = 0x0; i < 0xC; i ++) data.push_back(i % 0x3);

    // Using two threads
    std::vector<std::thread> thread;
    std::vector<double> result;
    result.push_back(0.0);

    thread.push_back(std::thread(function, data));
    thread.push_back(std::thread(function, data));

    // OOPS! Should have thread.join!
    thread[0].join();
    thread[1].join();

    return EXIT_SUCCESS;
}

但是当我尝试编译时,我得到了这个错误:

no type named 'type' in class std::result_of<void (*(std::vector<double>))(std::vector<double>&)>

我猜这意味着我不允许在我的函数中传递对向量的引用作为参数。有这个问题的解决方案吗?我可以改为通过指针吗?

2 个答案:

答案 0 :(得分:1)

使用std :: ref代替

恰克:

thread.push_back(std::thread(function, data));

为:

thread.push_back(std::thread(function, std::ref(data)));

答案 1 :(得分:0)

一种解决方案是使用指针代替。但这并没有回答为什么不允许引用变量的问题。

变化:

std::vector<double>&

要:

std::vector<double>*

由于需要解除引用,因此不是一个完美的解决方案。