Ошибка C ++ 0x: переменная 'std :: packaged_task <int>pt1' имеет инициализатор, но неполный тип - PullRequest
1 голос
/ 02 июня 2010

Ниже приведена простая программа на c ++ 0x, которая использует packaged_task и futures. при компиляции программы я получаю сообщение об ошибке: переменная '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 Ответ

2 голосов
/ 15 сентября 2010

Шаблон класса 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()>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...