C ++ 0x错误:变量'std :: packaged_task <int> pt1'具有初始化程序但是类型不完整</int>

时间:2010-06-01 21:25:52

标签: c++ multithreading c++11

下面是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;
}

1 个答案:

答案 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()>类型。