Как получить аргумент для обещания :: set_exception (x)? - PullRequest
11 голосов
/ 25 сентября 2011

Я нашел в нескольких местах, как обещание следует использовать, ссылаясь на 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?

1 Ответ

15 голосов
/ 25 сентября 2011

Существует другое имя для copy_exception. copy_exception был переименован в конце процесса стандартизации из-за путаницы того, что он на самом деле сделал:

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

Эффекты : Создает объект exception_ptr, который ссылается на копию e, ...

Можно использовать make_exception_ptr или current_exception в зависимости от того, какое исключение вы пытаетесь установить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...