Повторное типизированное исключение в С++ или С++ 11
Мне нужно написать оболочку для функции. Его цель - кэшировать результат и, возможно, исключения функции. Он должен работать следующим образом: во время первого выполнения он должен выполнить функцию и сохранить результат (или исключение), возвращаемый функцией. Во время следующих исполнений он должен вернуть ранее сохраненный результат или исключение перехвата.
Проблема заключается в том, что я хочу сохранить тип исключения. Поэтому в основном я хочу поймать все виды исключений и реконструировать его в будущем, не теряя своего типа.
Я использую С++ или С++ 11, поэтому любое решение на одном из этих языков было бы очень оценено.
Ответы
Ответ 1
Вы ищете std::exception_ptr
.
Вы можете получить исключенное в данный момент исключение, используя std::current_exception()
, сохранить полученный std::exception_ptr
и бросить его позже с помощью std::rethrow_exception(std::exception_ptr)
Существует хороший пример использования cppreference wiki.
Ответ 2
exception_ptr из VС++ использует RaiseException