Я немного запутался в следующей записи. Я хочу создать очередь, которая содержит функции обратного вызова. Я думал, что это можно сделать следующим образом:
int fun(int);
[...]
std::queue<std::function<int(int)>> q0;
std::queue<decltype(fun)> q1;
std::queue<int (int)> q2;
Полный код https://onlinegdb.com/rkvAdPpmU
К сожалению, decltype<fun>
и int (int)
не разрешены. Если честно, я предпочитаю способ std::function
. Теперь для следующей части ...
Недавно я придумал вещь под названием packaged_task
. Я попытался определить шаблон так же, как и с очередью:
int fib(int);
[...]
std::packaged_task<int (int)> f0(fib);
std::packaged_task<decltype(fib)> f1(&fib);
std::packaged_task<std::function<int(int)>> f2(&fib);
Полный код https://www.onlinegdb.com/B17iYvaQL
Компиляция привела к другому результату. Теперь std::function
дал error: variable ‘std::packaged_task<std::function<int(int)> > f2’ has initializer but incomplete type
. Другие способы инициализации в порядке.
Мои вопросы:
1) int (int)
эквивалентно decltype(fib)
, где int fib(int)
?
2) Пока я понимаю что std::function
на самом деле является шаблонным классом, разве он не должен использоваться одинаково в queue
и packaged_task
?