2011-09-25 14 views
9

Ho trovato in vari punti come una promessa deve essere utilizzata con riferimento a copy_exception, ma non riesco a trovarla nell'attuale FDIS. C'è un modo alternativo su come usare set_exception() da quei blog?Come ottenere l'argomento promessa :: set_exception (x)?

Per esempio here

void asyncFun(promise<int> intPromise) 
{ 
    int result; 
    try { 
     // calculate the result 
     intPromise.set_value(result); 
    } catch (MyException e) { 
     intPromise.set_exception(std::copy_exception(e)); // <- copy 
    } 
} 

trovo std::current_exception()here.

catch(...) 
{ 
    p.set_exception(std::current_exception()); 
} 

Quindi le mie domande:

  • importante usare sempre current_exception(), anche quando io non prendo "..."?
  • Oppure c'è un nuovo nome per copy_exception?

risposta

14

C'è un nome diverso per copy_exception. copy_exception è stata ribattezzata in ritardo nel processo di normalizzazione sopra confusione di ciò che effettivamente ha fatto:

template<class E> 
    exception_ptr make_exception_ptr(E e) noexcept; 

Effetti: Crea un oggetto exception_ptr che si riferisce a una copia del e, ...

L'uso di make_exception_ptr o current_exception va bene, a seconda dell'eccezione che si sta tentando di impostare.