Namespaces
Variants

std::experimental:: when_any

From cppreference.net
Definiert in Header <experimental/future>
template < class Sequence >

struct when_any_result {
std:: size_t index ;
Sequence futures ;

} ;
(Concurrency TS)
template < class InputIt >

auto when_any ( InputIt first, InputIt last )

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

auto when_any ( Futures && ... futures )

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

Erstellen Sie ein future -Objekt, das bereit wird, wenn mindestens eines der Eingabe- future s und shared_future s bereit wird. Das Verhalten ist undefiniert, falls eine Eingabe- future oder shared_future ungültig ist.

Insbesondere sei Sequence ein std:: vector < typename std:: iterator_traits < InputIt > :: value_type > für (1) und std:: tuple < std:: decay_t < Futures > ... > für (2) . Diese Funktionsvorlage erzeugt einen gemeinsamen Zustand, der when_any_result<Sequence> enthält, und gibt ein Future zurück, das auf diesen gemeinsamen Zustand verweist. Jedes Eingabe- future wird in das entsprechende Objekt im futures -Member des when_any_result<Sequence> im gemeinsamen Zustand verschoben, und jedes Eingabe- shared_future wird in das entsprechende Objekt im futures -Member des when_any_result<Sequence> im gemeinsamen Zustand kopiert. Die Reihenfolge der Objekte in der Sequence entspricht der Reihenfolge der Argumente.

1) Diese Funktion nimmt nicht an der Überladungsauflösung teil, es sei denn, InputIt 's Werttyp (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 Überladungsauflösung teil, es sei denn, jedes Argument ist entweder ein (möglicherweise cv-qualifizierter) std::experimental::shared_future oder ein nicht cv-qualifizierter std::experimental::future . (Formal gilt: 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 Eingabe- future nicht mehr gültig; jedes Eingabe- shared_future bleibt gültig.

Rückgabewert

Ein future , der auf den durch den Aufruf erstellten gemeinsamen Zustand verweist. Der future ist immer valid ( ) und wird bereit, wenn mindestens einer der Eingabe- future s und shared_future s des Aufrufs bereit ist. Das index -Mitglied der when_any_result enthält die Position des bereiten future oder shared_future im futures -Mitglied.

1) Wenn der Bereich leer ist (d.h., first == last ), ist das zurückgegebene future sofort bereit; das futures -Feld des when_any_result ist ein leerer Vektor, und das index -Feld ist size_t ( - 1 ) .
2) Wenn kein Argument angegeben wird, ist das zurückgegebene future sofort bereit; das futures -Feld des when_any_result ist ein leeres Tupel, und das index -Feld ist size_t ( - 1 ) .