std::packaged_task::packaged_task - cppreference.com
De cppreference.com
|
|
(1) | (desde C++11) |
|
|
(2) | (desde C++11) |
|
|
(3) | (desde C++11) (hasta C++17) |
|
|
(4) | (desde C++11) |
|
|
(5) | (desde C++11) |
Construye un nuevo objeto std::packaged_task.
1) Construye un objeto std::packaged_task sin una tarea y sin un estado compartido.
2) Construye un objeto std::packaged_task object con un estado compartido y una copia de la tarea, inicializada con std::forward<F>(f). Este constructor no participa en la resolución de sobrecarga si std::decay<F>::type es el mismo tipo que std::packaged_task<R(ArgTypes...)>.
3) Construye un objeto std::packaged_task object con un estado compartido y una copia de la tarea, inicializada con std::forward<F>(f). Utiliza el asignador de memoria proporcionado para asignar la memoria necesaria para almacenar la tarea. Este constructor no participa en la resolución de sobrecarga si std::decay<F>::type es el mismo tipo que std::packaged_task<R(ArgTypes...)>.
4) El constructor de copia está eliminado, std::packaged_task es de solo movimiento.
5) Construye un objeto std::packaged_task con el estado compartido y la tarea previamente poseída por rhs, dejando a rhs sin un estado compartido y con una tarea cuyo contenido se ha movido.
Parámetros
| f | - | El objeto invocable (función, función miembro, expresión lambda, objeto función) a ejecutar. |
| a | - | El asignador de memoria a usar al almacenar la tarea. |
| rhs | - | El objeto std::packaged_task del cual mover.
|
Excepciones
2) Cualquier excepción lanzada por el constructor de copia o movimiento de f y posiblemente std::bad_alloc si la asignación de memoria falla.
3) Cualquier excepción lanzada por el constructor de copia o movimiento de f y por la función allocate del asignador de memoria si la asignación de memoria falla.
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 resultado = fib_task.get_future(); std::thread t(std::move(fib_task), 42); std::cout << "Esperando a que termine la tarea..." << std::endl; std::cout << resultado.get() << '\n'; std::cout << "Tarea completa\n"; t.join(); }
Salida:
Iniciando tarea Esperando a que termine la tarea... 267914296 Tarea completa
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2067 | C++11 | El constructor de copia eliminado tomaba una referencia a no const.
|
Se hizo const.
|