Бих искал да хвана изключение от метод, който връща референция, без да хвана същото изключение от по-късно извикване, което използва референцията. Например:
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