2011-09-25 15 views
9

Tôi tìm thấy ở một số địa điểm về cách lời hứa nên được sử dụng tham chiếu đến copy_exception, nhưng tôi không thể tìm thấy nó trong FDIS hiện tại. Có cách nào khác về cách sử dụng set_exception() vì các blog đó không?Làm thế nào để có được đối số cho lời hứa :: set_exception (x)?

Ví dụ 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 
    } 
} 

tôi thấy std::current_exception()here.

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

Vì vậy câu hỏi của tôi:

  • Tôi có nên luôn luôn sử dụng current_exception(), ngay cả khi tôi không bắt "..."?
  • Hoặc có tên khác mới cho copy_exception không?

Trả lời

14

Có một tên khác cho copy_exception. copy_exception được đổi tên thành muộn trong quá trình tiêu chuẩn hóa trên nhầm lẫn về những gì nó thực sự đã làm:

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

Hiệu ứng: Tạo một đối tượng exception_ptr đó đề cập đến một bản sao của e ...

Sử dụng make_exception_ptr hoặc current_exception là tốt, tùy thuộc vào ngoại lệ bạn đang cố đặt.

Các vấn đề liên quan