Namensräume
Varianten
Aktionen

std::experimental::packaged_task<R(Args...)>::packaged_task (library fundamentals TS)

Von cppreference.com
 
 
 
 
 
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)