使用带有vector :: push_back的线程作为第一个参数时,C ++编译错误

时间:2016-12-09 10:24:52

标签: c++ multithreading

#include <vector>
#include <thread>

int main()
{
    vector<int> a;
    thread s(&vector<int>::push_back,&a,3);
}

我收到这些代码的编译错误:

main.cpp:52:39: error: no matching function for call to
‘std::thread::thread(<unresolved overloaded function type>, std::vector<int>*, int)’

thread s(&vector<int>::push_back,&a,3);

我可以得到任何帮助吗?

2 个答案:

答案 0 :(得分:2)

错误告诉您它不知道要使用哪个vector<int>::push_back重载,

void vector<int>::push_back(const int& val);

void vector<int>::push_back(int&& val);

因为它们都有相同的名称。

解决方法是static_cast到所需的函数类型,或者声明一个正确类型的变量,

e.g。

thread s(static_cast<void(vector<int>::*)(const int&)>(&vector<int>::push_back),&a,3);

void (vector<int>::* func)(const int&) = &vector<int>::push_back;
thread s(func, &a, 3);

我知道,这太可怕了。

答案 1 :(得分:1)

您可以尝试传递lambda:

thread s([](vector<int>& a, int b) {
     a.push_back(b);
}, std::ref(a), 3);