привет, олл.
допустим, имеется у меня класс, с методом по распарсиванию определенных данных, результат работы которого используется далее в программе объектом другого класса.
подскажите, как можно улучшить следующий кусок кода:
std::auto_ptr<CData> CParser::parse(){
std::auto_ptr<CData> pData(new CData());
try{
//do dirty work. (парсим в общем)
//в случае обнаружения некорректности синтаксиса данных, кидаем исключение CSyntaxError
}catch (const CSyntaxError &e){
throw e;
}
return pData;
}
точка входа:
int main(){
try{
CParser parser;
std::auto_ptr<CData> pData = parser.parse();
//--далее работаем с pData
//--которая должна
//--быть валидной
}catch(const CSyntaxError &e){
//invalid flow of program
std::cout << e.what() << std::endl;
}
return 0;
}
в вышеприведенном куске кода не нравится то, что мы ловим исключение CSyntaxError, и re-throw-им его, а выше, в самой main() еще раз ловим его. налицо нерациональность.
логика такова, что при выбрасывание исключения в методе CParser::parser()
уже является достаточным для завершения проги. но как-то писать в этом методе здесь exit(-1); рука не поднимается.
у кого-нибудь есть идеи по поводу улучшения этого подхода? просто нужно мозгам моим перестроиться на нужную стезю, а сам не могу непредвзято посмотреть на это все.
жду подсказки, спасибо.