如何在 C++ 中传递 <std::function<void(int)>> 参数

how to pass <std::function<void(int)>> paramater in c++

我正在尝试在 C++ 中执行线程池设计模式,但我一直坚持传递任务函数参数以便将其推送到列表中 这是我的代码

  std::list<std::function<void(int)>> work_queue; 

我的推送功能

 void pushTask(std::function<void(int)> func , int a) 
{ 
std::unique_lock<std::mutex> lck(wq_mutex);
work_queue.push_back(std::function<void(int)>(func),a));
 }   

这是我的主要功能和任务功能

void calcul(int a){
std::cout << a << "\n";
}

int main(){
ThreadPool th(10);
th.pushTask(std::bind(&calcule,4));
return 0;

}

我在这一行中遇到错误

   work_queue.push_back(std::function<void(int)>(func),a));

谁能找出问题所在?

你做错了。

std::list<std::function<void()>> work_queue; // you do not need int here

void pushTask(std::function<void()> func) // so here it is also obsolete
{ 
    std::unique_lock<std::mutex> lck(wq_mutex);
    work_queue.push_back(std::move(func));
}

// now this will be ok
th.pushTask(std::bind(&calcule,4));
// but since this is C++11 lambda is preferred 
th.pushTask([]() { calcule(4); } );