Namensräume
Varianten
Aktionen

std::experimental::when_all

Von cppreference.com
 
 
 
 
Definiert im Header <experimental/future>
template< class InputIt >

auto when_all( InputIt first, InputIt last )

    -> future<std::vector<typename std::iterator_traits<InputIt>::value_type>>;
(1) (Concurrency TS)
template< class... Futures >

auto when_all( Futures&&... futures )

    -> future<std::tuple<std::decay_t<Futures>...>>;
(2) (Concurrency TS)

Erzeugt ein future-Objekt, das bereit wird, wenn alle der eingegebenen futures und shared_futures bereit werden. Das Verhalten ist undefiniert, wenn irgendein eingegebenes future oder shared_future ungültig ist.

Sei insbesondere Sequence ein std::vector<typename std::iterator_traits<InputIt>::value_type> für (1) und ein std::tuple<std::decay_t<Futures>...> für (2). Diese Funktion-Template erstellt einen Shared State, der Sequence enthält, und gibt ein Future zurück, das auf den Shared State verweist. Jedes eingegebene future wird in das entsprechende Objekt in der Sequence im Shared State verschoben, und jedes eingegebene shared_future wird in das entsprechende Objekt in der Sequence im Shared State kopiert. Die Reihenfolge der Objekte in der Sequence entspricht der Reihenfolge der Argumente.

1) Diese Funktion nimmt nicht an der Overload Resolution teil, es sei denn, der Werttyp von InputIt (d.h. typename std::iterator_traits<InputIt>::value_type) ist ein std::experimental::future oder std::experimental::shared_future.
2) Diese Funktion nimmt nicht an der Overload Resolution teil, es sei denn, jedes Argument ist entweder ein (möglicherweise cv-qualifiziertes) std::experimental::shared_future oder ein cv-unqualifiziertes std::experimental::future. (Formal: Für jeden Typ Fn in Futures ist entweder std::remove_reference_t<Fn> ein std::experimental::future<Rn> oder std::decay_t<Fn> ist ein std::experimental::shared_future<Rn>.)

Nach diesem Aufruf ist jedes eingegebene future nicht mehr gültig; jedes eingegebene shared_future bleibt gültig.

[bearbeiten] Rückgabewert

Ein future, das auf den durch den Aufruf erzeugten Shared State verweist. Das Future ist immer gültig() und wird bereit, wenn alle eingegebenen futures und shared_futures des Aufrufs bereit sind.

1) Wenn der Bereich leer ist (d.h. first == last), enthält das zurückgegebene future einen leeren Vektor und ist sofort bereit.
2) Wenn keine Argumente übergeben werden, wird ein future<std::tuple<>> zurückgegeben und ist sofort bereit.