下面是c ++ 0x中一个使用packaged_task和future的简单程序。编译程序时我得到错误:变量'std :: packaged_task pt1'有初始化程序但是类型不完整
程序在下面
#include <future>
#include <iostream>
using namespace std;
int printFn()
{
for(int i = 0; i < 100; i++)
{
cout << "thread " << i << endl;
}
return 1;
}
int main()
{
packaged_task<int> pt1(&printFn);
future<int> fut = pt1.get_future();
thread t(move(pt1));
t.detach();
int value = fut.get();
return 0;
}
答案 0 :(得分:2)
对于一般情况,类模板packaged_task
未定义。仅定义了函数类型参数的部分特化。查看当前的草案:
template<class> class packaged_task; // undefined
template<class R, class... ArgsTypes>
class packaged_task<R(ArgTypes...)> {
...
void operator()(ArgTypes...);
...
};
由于您的printFn
函数未接受任何参数并返回int
,因此您需要使用packaged_task<int()>
类型。