2011-09-25 16 views
9

sözlüğünün copy_exception numaralı başvuruda nasıl kullanıldığına dair çeşitli yerlerde bulundu, ancak geçerli FDIS'de bulamıyorum. Bu bloglardan beri set_exception()'un nasıl kullanıldığına dair alternatif bir yol var mı? Örneğin herePromise :: set_exception (x) için argüman nasıl alınır?

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 
    } 
} 

için

Ben std::current_exception()here bulabilirsiniz. Bu nedenle

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

sorularım: Ben "..." yakalamak yokken bile

  • Hep, current_exception() kullanmalı mıyım?
  • Yoksa copy_exception için yeni bir ad var mı?

cevap

14

copy_exception için farklı bir ad var.

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

Effects: copy_exception aslında yaptıklarının karışıklık üzerinde standardizasyon sürecinde geç değiştirildi e bir kopyası anlamına gelir bir exception_ptr nesneyi ... oluşturur

Ayarlamaya çalıştığınız özel duruma bağlı olarak make_exception_ptr veya current_exception'un kullanımı iyi olur.