std::experimental::packaged_task<R(Args...)>::packaged_task (library fundamentals TS)
Von cppreference.com
< cpp | experimental | lib extensions | packaged task
| packaged_task() noexcept; |
(1) | (library fundamentals TS) |
| template< class F > explicit packaged_task( F&& f ); |
(2) | (library fundamentals TS) |
| template< class F, class Allocator > explicit packaged_task( std::allocator_arg_t, const Allocator& alloc, F&& f ); |
(3) | (library fundamentals TS) |
| packaged_task( const packaged_task& ) = delete; |
(4) | (library fundamentals TS) |
| packaged_task( packaged_task&& rhs ) noexcept; |
(5) | (library fundamentals TS) |
Konstruiert ein neues Objekt vom Typ std::experimental::packaged_task.
1) Konstruiert ein Objekt vom Typ
std::experimental::packaged_task ohne Task und ohne gemeinsamen Zustand.2) Konstruiert ein Objekt vom Typ
std::experimental::packaged_task mit gemeinsamem Zustand und einer Kopie des Tasks, initialisiert mit std::forward<F>(f). Dieser Konstruktor nimmt nicht an der Überladungsauflösung teil, wenn std::decay<F>::type denselben Typ wie std::packaged_task<R(ArgTypes...)> hat.3) Konstruiert ein Objekt vom Typ
std::experimental::packaged_task mit gemeinsamem Zustand und einer Kopie des Tasks, initialisiert mit std::forward<F>(f). Verwendet den bereitgestellten Allokator, um den benötigten Speicher zur Speicherung des Tasks zuzuweisen, der als typ-erased Allokator behandelt wird (siehe unten). Dieser Konstruktor nimmt nicht an der Überladungsauflösung teil, wenn std::decay<F>::type denselben Typ wie std::packaged_task<R(ArgTypes...)> hat.4) Der Kopierkonstruktor ist gelöscht,
std::experimental::packaged_task ist nur durch Verschieben verschiebbar.5) Konstruiert ein
std::experimental::packaged_task mit dem gemeinsamen Zustand und dem Task, die zuvor von rhs gehalten wurden, wobei rhs ohne gemeinsamen Zustand und mit einem verschobenen Task zurückbleibt.[edit] Typ-erased Allocator
Die Konstruktoren von packaged_task, die ein Allokatorargument alloc verwenden, behandeln dieses Argument als typ-erased Allokator. Die Speicherressource, die von packaged_task zur Speicherzuweisung verwendet wird, wird wie folgt aus dem Allokatorargument (falls angegeben) bestimmt:
Typ von alloc |
Wert des Speicherressourcenzeigers |
| Nicht vorhanden (kein Allocator zum Zeitpunkt der Konstruktion angegeben) | Der Wert von std::experimental::pmr::get_default_resource() zum Zeitpunkt der Konstruktion. |
| std::nullptr_t | Der Wert von std::experimental::pmr::get_default_resource() zum Zeitpunkt der Konstruktion. |
| Ein Zeigertyp, der konvertierbar ist zu std::experimental::pmr::memory_resource* |
static_cast<std::experimental::pmr::memory_resource*>(alloc) |
| Eine Spezialisierung von std::experimental::pmr::polymorphic_allocator |
alloc.resource() |
| Ein anderer Typ, der die Anforderungen an Allocator erfüllt | Ein Zeiger auf einen Wert vom Typ std::experimental::pmr::resource_adaptor<A>(alloc), wobei A der Typ von alloc ist. Der Zeiger bleibt nur für die Lebensdauer des packaged_task-Objekts gültig. |
| Keine der obigen Optionen | Das Programm ist schlecht formuliert. |
[bearbeiten] Parameter
| f | - | das aufrufbare Ziel (Funktion, Memberfunktion, Lambda-Ausdruck, Funktor), das ausgeführt werden soll |
| alloc | - | der Allokator, der beim Speichern des Tasks verwendet werden soll |
| rhs | - | der std::experimental::packaged_task, von dem verschoben wird |
[bearbeiten] Exceptions
2,3) Alle Ausnahmen, die vom Kopier-/Verschiebekonstruktor von f und möglicherweise std::bad_alloc geworfen werden, wenn die Speicherzuweisung fehlschlägt.
4) (keine)