我想在C++中创建一个线程池。概念是main将创建一个新的Task,并且ThreadPool类将获得Task对象并实现其他工作。这是任务等级:绑定返回值和可变参数模板
template<typename ... Arguments>
class Task{
//
public:
Task(std::function<void (Arguments...)> _func, Arguments... _args){
auto f1 = std::bind(_func, _args...);
f1();
};
void run(){
};
};
,这我是多么想使用它:
#include <iostream>
#include <algorithm>
#include "Task.hpp"
void prtinhi(int a)
{
std::cout << a << std::endl;
return;
}
int main(){
Task<int> task(prtinhi, 5);
task.run();
return 0;
}
显然,工作对象将在线程池被传递和线程池将调用的run()根据一些逻辑。 此代码运行成功打印5.但我想要的是从run()函数调用f1()。如果我改变Task类有auto f1
确定指标作为类成员,我得到一个错误:
non-static data member declared ‘auto’
我若静,我不能一个值分配给它。 那么我该如何解决这个问题呢?有没有更好的方法来做到这一点?
'decltype'也许? – DavidW
我不明白如何decltype可以帮助我在这里... –