11

我在几个地方找到了关于如何使用promise的引用copy_exception,但我在当前的 FDIS 中找不到它。set_exception()自那些博客以来,是否有其他使用方法?

例如这里

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

我在std::current_exception() 这里找到。

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

因此我的问题:

  • 我是否应该一直使用current_exception(),即使我没有捕捉到“ ...”?
  • 还是有新的不同名称copy_exception
4

1 回答 1

15

有一个不同的名称copy_exceptioncopy_exception由于混淆了它的实际作用,在标准化过程的后期重新命名:

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

效果:创建一个exception_ptr引用副本的对象 e,...

使用make_exception_ptrorcurrent_exception都可以,具体取决于您要设置的异常。

于 2011-09-25T15:04:27.750 回答