【发布时间】:2018-11-18 20:40:18
【问题描述】:
我正在尝试在 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));
谁能指出问题所在?
【问题讨论】:
-
避免使用那种演员表,应该是
work_queue.push_back(func, a);。在您的示例中,括号不匹配。如果您仍然遇到问题,请发布MCVE -
当编译器给你一个错误时,仔细阅读它是很重要的。如果您不理解它并想发布有关它的整个 Stack Overflow 问题,您应该做的最低限度是在代码中包含错误消息。
-
错误是什么?我想我算了一个额外的
),是这个问题吗? -
我将错误行更改为 work_queue.push_back(func,a);我仍然收到错误:没有匹配的功能错误
-
请注意
std::bind(&calcule,4)的结果不能隐式转换为std::function<void(int)>,因为您显式绑定了参数4——它的“有效”类型是std::function<void()>。
标签: c++ multithreading std-function