Здравствуйте, Blitz, Вы писали:
B>Все эти try — catch... больше всего пугает throw...
B>Мне легче дополнительный if(blah-blah-blah){ kill them all } написать, нежели даже пытаться писать с try — catch..
Дело в том, что try — catch предназначен для обработки куска кода, где заранее не известно будет ошибка или нет, а проверить наличие ошибки до выполнения кусочка кода часто сложно.
Достаточно удобно try — catch использовать для передачи ошибки в функцию из которой вызывалась.
Например, разборщик текстов, имеющий:
main(void) - головная функция
parser_text(char *file_name) - парсер всего текста
parser_str(char *str) - парсер отдельной строки
Логика вызова такая: main -> parser_text -> parser_str
В parser_str:
char ss[16]; // строка с ошибкой
int pos=0; // текущая позиция в строке
try{
// Код потенциально пораждающий ошибку
...
pos++;
}
catch(...){
// Поймали ошибку, передаем информацию об ошибке вызывающей функции
itoa(ss,pos,16);
throw ss;
}
В parser_text:
int pos=0;
char error[50]; // текст ошибки
try{
// Парсер строки
parser_str(str);
...
pos++;
}
catch(char * ss){
// Поймали ошибку, передаем информацию об ошибке вызывающей функции
// добавляем информацию на данном уровне в переменную error
...
throw error;
}
В main:
try{
// Парсер строки
parser_text(str);
}
catch(char *ss){
// Выводим ошибку
cout << "Ошибка в строке" << ss;
}
Человека с характером трудности привлекают, потому что только при помощи них он может осознать свой потенциал. (c)Шарль де Голль