Как мне правильно перенести упакованный_task в лямбду?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне правильно перенести упакованный_task в лямбду?

Сообщение Anonymous »

Я пытался захватить packaged_task в лямбду, но я потерпел неудачу.

Я вообще понимаю, что вообще читаю, также прочитал некоторую современную литературу, и я думал, что ничего не пропустил. Также я прочитал книгу «Семантика перемещения Джосуттиса», и ISO Тема об обобщенном лямбда -захватах и ​​аналогичном случае в ISO C ++ 14 Расширения языка

У меня есть следующий код: < /p>

#include
#include
#include
#include
#include
#include
#include
#include
#include

// #include's for below code and other purposes

int main() {
auto f = []() { return 1; };
std::queue q;
std::packaged_task pack(f);
q.emplace([p = std::move(pack)] () mutable { p(); });

return 0;
}
< /code>

Здесь я создаю простую очередь функций, удерживая некоторые «void ()» и packaged_task, передавая «f» из «int 'return type.

Затем я пытаюсь перенести packaged_tas Ссылка)

кажется хорошим, но когда я составляю его с "g ++ main.cpp -o main -std = c ++ 14" (и даже с C ++ 17), G ++ говорит мне:


/usr/include/c ++/9/bits/bits/std_funt Удаленная функция ‘main () ::: :( const main () :: &)’

176 | new _functor (*__ source._m_access ());

| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

main.cpp:19:32: note: ‘main()::::(const main()::&)’ is implicitly deleted because the default definition would be ill-formed:

19 | Q.emplace ([p = std :: move (pack)] () mitable {p ();});

| ^

main.cpp: 19: 32: ошибка: использование удаленной функции ‘std :: packaged_task :: packaged_task (const std :: packaged_task &) [с _res = int; _Argtypes = {}] ’

в файле, включенном из main.cpp: 8:

/usr /include /c ++ /9 /future: 1511: 7: Примечание: объявлено здесь

1511 | packaged_task (const packaged_task &) = delete;

| ^~~~~~~~~ ~

Подробнее здесь: https://stackoverflow.com/questions/618 ... -to-lambda
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»