пробегитесь по коду, пожалуйста.
От: Аноним  
Дата: 08.06.08 17:53
Оценка:
привет, олл.

допустим, имеется у меня класс, с методом по распарсиванию определенных данных, результат работы которого используется далее в программе объектом другого класса.
подскажите, как можно улучшить следующий кусок кода:
 
    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); рука не поднимается.
у кого-нибудь есть идеи по поводу улучшения этого подхода? просто нужно мозгам моим перестроиться на нужную стезю, а сам не могу непредвзято посмотреть на это все.
жду подсказки, спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.