您好我正在开发线程池实现,我的想法是 例如,使用两个线程池,将输入数据传递给第一个线程池 并返回as future,然后传递给第二个线程池
我正在尝试使用来自的线程池代码 github.com/Tyler-Hardin/thread_pool
代码的核心部分如下
template<typename Ret>
std::future<Ret> async(std::function<Ret()> f){
typedef std::function<Ret()> F;
std::promise<Ret> *p = new std::promise<Ret>;
// Create a function to package as a task.
auto task_wrapper = [p](F&& f){
p->set_value(std::move(f()));
};
// Create a function to package as a future for the user to wait on.
auto ret_wrapper = [p]() -> Ret{
auto temp = std::move(p->get_future().get());
// Clean up resources
delete p;
return std::move(temp);
};
task_mutex.lock();
// Package the task wrapper into a function to execute as a task.
auto task = std::async(std::launch::deferred,
task_wrapper,
std::move(f));
// Push the task onto the work queue.
tasks.emplace_back(std::move(task));
task_mutex.unlock();
// complete and to get the result.
return std::async(std::launch::deferred,
ret_wrapper);
}
现在我要做的是如下 首先,我有两个处理功能。
int func1(int i1)
{
// do something
return i1;
}
int func2(std::future<int> &i2)
{
int i3 = i2.get();
// do something
return i3;
}
主叫代码如下
int input = 1;
1
std::future<int> ret1 = tpool1->async(std::function<int(int)>func1, input);
2
std::future<int> ret2 = tpool2->async(std::function<int(std::future<int> &)>func2, std::ref(ret1));
问题是1)可以编译成功,2)遇到编译错误 &#34;没有匹配的参数&#34;
我尝试过不同的东西而且都没有用,有人可以帮助我吗?