C'è un modo per verificare se un futuro sta per gettare prima di chiamare ottenere?
No, poiché sarebbe in qualche modo uguale ricevere il valore memorizzato in futuro.
Spero valido verrebbe controllato ... Non sono davvero sicuro di come ottenere valido per restituire falso.
valido restituirà true se il futuro si riferisce ad uno stato condiviso che può essere creato solo da std::async
, std::packaged_task
o std::promise
. Un controesempio sarebbe un valore predefinito creato std::future
. Valido sarà anche falso una volta che hai chiamato get
o share
su un futuro valido (= = true) valido una volta.
La chiamata a qualsiasi altra funzione di valid
o l'operatore di assegnazione spostamento su un valore non valido (valido == falso) futuro è UB.
Distruggere la promessa senza impostare un valore non lo fa.
No, come detto sopra non è il punto di validità, poiché il futuro si riferisce ancora allo stato condiviso solo che l'altra parte - la promessa - non è stata soddisfatta. Se sulla distruzione di una promessa non è stato impostato alcun valore o eccezione, viene impostata un'eccezione per indicare che la promessa non è stata corretta.
Un 'std :: future' può essere visto come un osservatore allo stato di un' std :: promise'. Se la promessa è andata, il futuro sta penzolando. Non è UB come dice lui, ma ottieni un'eccezione 'std :: broken_promise', perché la promessa non può mai essere soddisfatta. – Xeo
valido restituirà false una volta che hai chiamato 'get' o' share' una volta. – inf
[futuro :: valido] (http://en.cppreference.com/w/cpp/thread/future/valid) dice "Controlla se il futuro si riferisce a uno stato condiviso". Se la promessa è andata e il valore non è mai stato impostato, non significa che non esiste uno stato condiviso? – David