Получите массив, который вызывает `std :: out_of_range` - PullRequest
0 голосов
/ 25 апреля 2018

В C ++ возможно ли программным путем получить доступ к контейнеру, который вызывает выброс std::out_of_range в блок catch?

РЕДАКТИРОВАТЬ: я не собираюсь отлаживать или восстанавливать проблемный контейнер.У меня просто есть два разных контейнера с лямбда-функциями. Поток в блоке catch зависит от того, какой контейнер проблемный.

1 Ответ

0 голосов
/ 25 апреля 2018

Если вы управляете выдачей исключений, вы можете попробовать создать собственное исключение, а затем выбросить его.Хотя зачем бросать, если вы уже знали об исключительной ситуации.Обычно не имеет смысла бросать и ловить ваши собственные исключения, но в вашем особом случае вы можете попытаться сделать именно это.Поэтому вам нужно написать собственный класс исключений, который инкапсулирует информацию о рассматриваемом контейнере, сгенерирует его и затем обработает его.

Однако состояние контейнера сомнительно во время обработки исключения.

Подумайте о следующем:

  • Имеет ли смысл бросать и ловить ваше собственное исключение?
  • Если вы не выбросите исключение, то как бы вы получили информацию о контейнере?
  • Зачем вам вообще нужен доступ к контейнеру?
  • Контейнер находится в стеке или в куче?
  • Кто контролирует срок службы контейнера?
  • Вы повторно выбрасываете исключение?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...