Я хотел бы поймать исключение из метода, который возвращает ссылку, не перехватывая то же самое исключение из более позднего вызова, который использует ссылку. Например:
try {
Something &o = myMap.at(myIndex);
foo(o);
} catch(std::out_of_range &e) {
// If this was thrown by myMap.at, we can handle it
// If this was thrown by foo, we can't, and need to propagate it
}
Итак, я хочу сделать что-то вроде этого:
Something &o;
try {
o = myMap.at(myIndex);
} catch(std::out_of_range &e) {
// Handle the error
}
foo(o);
Но, конечно, это недействительно. Я могу придумать способы обернуть исключения foo
в другое исключение, а затем развернуть его вне try
, но это довольно грязно. Есть ли способ лучше?
MCVE можно найти здесь: https://ideone.com/DJHxpO
foo
тоже может броситьstd::out_of_range
? В противном случае это не было бы проблемой. - person Some programmer dude   schedule 25.03.2017foo
заранее неизвестно, поэтому я должен предположить, что он может выдать что угодно. - person Dave   schedule 25.03.2017myIndex
в карте в первую очередь. - person Some programmer dude   schedule 25.03.2017