Повторное типизированное исключение в С++ или С++ 11 - программирование

Повторное типизированное исключение в С++ или С++ 11

Мне нужно написать оболочку для функции. Его цель - кэшировать результат и, возможно, исключения функции. Он должен работать следующим образом: во время первого выполнения он должен выполнить функцию и сохранить результат (или исключение), возвращаемый функцией. Во время следующих исполнений он должен вернуть ранее сохраненный результат или исключение перехвата.

Проблема заключается в том, что я хочу сохранить тип исключения. Поэтому в основном я хочу поймать все виды исключений и реконструировать его в будущем, не теряя своего типа.

Я использую С++ или С++ 11, поэтому любое решение на одном из этих языков было бы очень оценено.

4b9b3361

Ответ 1

Вы ищете std::exception_ptr.

Вы можете получить исключенное в данный момент исключение, используя std::current_exception(), сохранить полученный std::exception_ptr и бросить его позже с помощью std::rethrow_exception(std::exception_ptr)

Существует хороший пример использования cppreference wiki.

Ответ 2

exception_ptr из VС++ использует RaiseException