下面是一个使用 packaged_task 和 futures 的 c++0x 简单程序。编译程序时出现错误:变量“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;
}
最佳答案
类模板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()>
类型。
关于C++0x 错误 : variable 'std::packaged_task<int> pt1' has initializer but incomplete type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953457/