std::packaged_task<R(Args...)>:: packaged_task
|
packaged_task
(
)
noexcept
;
|
(1) | (desde C++11) |
|
template
<
class
F
>
explicit packaged_task ( F && f ) ; |
(2) | (desde C++11) |
|
template
<
class
F,
class
Allocator
>
explicit packaged_task ( std:: allocator_arg_t , const Allocator & a, F && f ) ; |
(3) |
(desde C++11)
(hasta C++17) |
|
packaged_task
(
const
packaged_task
&
)
=
delete
;
|
(4) | (desde C++11) |
|
packaged_task
(
packaged_task
&&
rhs
)
noexcept
;
|
(5) | (desde C++11) |
Construye un nuevo objeto
std::packaged_task
.
std::packaged_task
sin tarea y sin estado compartido.
std::packaged_task
con una tarea almacenada de tipo
std::
decay
<
F
>
::
type
y un estado compartido. La tarea almacenada se inicializa con
std::
forward
<
F
>
(
f
)
.
|
Estas sobrecargas participan en la resolución de sobrecarga solo si std:: decay < F > :: type no es del mismo tipo que std:: packaged_task < R ( Args... ) > .
Sean
t1
,
t2
, ...,
tN
valores de los tipos correspondientes en
|
(hasta C++20) |
|
Esta sobrecarga participa en la resolución de sobrecarga solo si std:: remove_cvref_t < F > no es del mismo tipo que std:: packaged_task < R ( Args... ) > . Si std:: is_invocable_r_v < R, std:: decay_t < F > & , Args... > es false , el programa está mal formado. |
(desde C++20) |
std::packaged_task
es solo de movimiento.
std::packaged_task
con el estado compartido y la tarea previamente propiedad de
rhs
, dejando a
rhs
sin estado compartido y con una tarea en estado movido.
Contenidos |
Parámetros
| f | - | el objetivo invocable a ejecutar |
| a | - | el asignador de memoria a utilizar al almacenar la tarea |
| rhs | - |
el
std::packaged_task
desde el cual mover
|
Excepciones
allocate
del asignador si falla la asignación de memoria.
Ejemplo
#include <future> #include <iostream> #include <thread> int fib(int n) { if (n < 3) return 1; else return fib(n - 1) + fib(n - 2); } int main() { std::packaged_task<int(int)> fib_task(&fib); std::cout << "Iniciando tarea\n"; auto result = fib_task.get_future(); std::thread t(std::move(fib_task), 42); std::cout << "Esperando a que la tarea finalice..." << std::endl; std::cout << result.get() << '\n'; std::cout << "Tarea completada\n"; t.join(); }
Salida:
Iniciando tarea Esperando a que la tarea finalice... 267914296 Tarea completada
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2067 | C++11 |
el tipo de parámetro del constructor de copia era
packaged_task&
|
se añadió const |
| LWG 2097 | C++11 |
para las sobrecargas
(2,3)
,
F
podría ser
std::packaged_task<R(Args...)>
|
F
está restringido
|
| LWG 4154 | C++11 | las sobrecargas (2,3) no consideraban el decaimiento | considerar el decaimiento |