Исключения
Хранящееся исключение, если таковое имеется.
D.4.3. Шаблон класса std::packaged_task
Шаблон класса std::packaged_task
упаковывает функцию или другой допускающий вызов объект, так что при вызове функции через экземпляр std::packaged_task
результат сохраняется в виде асинхронного результата, который может быть получен с помощью объекта std::future
.
Экземпляры std::packaged_task
удовлетворяют требованиям концепций MoveConstructible
и MoveAssignable
, но не CopyConstructible
и CopyAssignable
.
Определение класса
template
class packaged_task; // не определен
template
class packaged_task {
public:
packaged_task() noexcept;
packaged_task(packaged_task&&) noexcept;
~packaged_task();
packaged_task& operator=(packaged_task&&) noexcept;
packaged_task(packaged_task const&) = delete;
packaged_task& operator=(packaged_task const&) = delete;
void swap(packaged_task&) noexcept;
template
explicit packaged_task(Callable&& func);
template
packaged_task(
std::allocator_arg_t, const Allocator&, Callable&&);
bool valid() const noexcept;
std::future get_future();
void operator()(ArgTypes...);
void make_ready_at_thread_exit(ArgTypes...); void reset();
};
STD::PACKAGED_TASK
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект std::packaged_task
.
Объявление
packaged_task() noexcept;
Результат
Конструирует экземпляр std::packaged_task
, с которым не ассоциировала ни задача, ни асинхронный результат.
Исключения
Нет.
STD::PACKAGED_TASK
, КОНСТРУИРОВАНИЕ ИЗ ДОПУСКАЮЩЕГО ВЫЗОВ ОБЪЕКТА
Конструирует экземпляр std::packaged_task
, с которым ассоциированы задача и асинхронный результат.
Объявление
template
packaged_task(Callable&& func);
Предусловия
Должно быть допустимо выражение func(args...)
, где каждый элемент args- i
в списке args...
должен быть значением соответственного типа ArgTypes- i
в списке ArgTypes...
. Возвращаемое значение должно допускать преобразование в тип ResultType
.
Результат
Конструирует экземпляр std::packaged_task
, с которым ассоциированы еще не готовый асинхронный результат типа ResultType
и задача типа Callable
, полученная копированием func
.
Исключения
Исключение типа std::bad_alloc
, если конструктор не смог выделить память для асинхронного результата. Любое исключение, возбуждаемое копирующим или перемещающим конструктором Callable
.
STD::PACKAGED_TASK
, КОНСТРУИРОВАНИЕ ИЗ ДОПУСКАЮЩЕГО ВЫЗОВ ОБЪЕКТА С РАСПРЕДЕЛИТЕЛЕМ
Конструирует экземпляр std::packaged_task
, с которым ассоциированы задача и асинхронный результат, применяя предоставленный распределитель для выделения памяти под асинхронный результат и задачу
Объявление
template
packaged_task(
std::allocator_arg_t, Allocator const& alloc, Callable&& func);
Предусловия
Должно быть допустимо выражение func(args...)
, где каждый элемент args- i
в списке args...
должен быть значением соответственного типа ArgTypes- i
в списке ArgTypes...
. Возвращаемое значение должно допускать преобразование в тип ResultType
.
Результат
Конструирует экземпляр std::packaged_task
, с которым ассоциированы еще не готовый асинхронный результат типа ResultType
и задача типа Callable
, полученная копированием func
. Память под асинхронный результат и задачу выделяется с помощью распределителя alloc
или его копии.
Исключения
Любое исключение, возбуждаемое распределителем в случае неудачной попытки выделить память под асинхронный результат или задачу. Любое исключение, возбуждаемое копирующим или перемещающим конструктором Callable
.
STD::PACKAGED_TASK
, ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР
Конструирует один объект std::packaged_task
из другого, передавая владение асинхронным результатом и задачей, ассоциированными с объектом other
, вновь сконструированному.
Объявление
packaged_task(packaged_task&& other) noexcept;
Результат
Конструирует новый экземпляр std::packaged_task
.
Постусловия
Асинхронный результат и задача, которые были ассоциированы с объектом other
до вызова конструктора, ассоциируются со вновь сконструированным объектом std::packaged_task
. С объектом other
больше не связан никакой асинхронный результат.
Исключения
Нет.
STD::PACKAGED_TASK
, ПЕРЕМЕЩАЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Читать дальше