На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Собственный Exception
    Добрый день!

    У меня есть вопрос: как сделать собсвенный класс обработки исключений нападобие CException в MFC и std::exception в STL.

    Можно это реализовать так чтобы не надо было делвать так:
    try
    {
    throw new MyException("Fatal Error");
    }
    catch(MyException *e)
    {
    ....
    }
    А чтобы в исключение передавалась информация о ошибке автоматически как std::exception
    try
    {
    ... // Здесь ошибка
    }
    catch(std::exception ....)
    {
    ... // Обработка.
    }
    то есть без throw.
      Цитата
      Mfcer__, 9.12.03, 00:58
      то есть без throw
      Как это без throw.
      Оно есть всегда, только не всегда видно(находится в подпрограмме).
        Например, так:

        class myexception : public std::exception
        {
        public:
        myexception(const std::string& info) : m_Info(info) {;}
        const char* what() const {return m_Info.c_str();}
        private:
        std::string m_Info;
        };

        //...
        try
        {
        if (error)
        throw myexpcetion("Processing error");
        }
        catch (std::exception& ex)
        {
        std::cout << "Exception occured: " << ex.what() << std::endl;
        }
        //...
          Цитата
          Flex_Ferrum, 9.12.03, 10:07
          class myexception : public std::exception

          а можно без наследования от std::exception huh.gif
            Можно и без наследования. Ты можешь хоть int выкинуть. Другой момент - что так лучше (ИМХО).
              В чем собственно проблема? Чем тебе наследование не угодило?
                Цитата
                dimedrol, 9.12.03, 17:07
                В чем собственно проблема? Чем тебе наследование не угодило?

                Во первых - хочется написать что то свою и с нуля
                Во вторых - разобраться с исключениями потщательней wink.gif
                  А на счет наследования: можно ли сразу сделать наследование и от std::exception и от CException ? ohmy.gif
                  И как в таком случае надо будет использовать получившийся класс?
                    Что значит "сразу"? Если ты унаследуешь свой класс исключения от одного из указанных - то исключение с таким классом будет ловиться обработчиками исключений всех базовых классов.
                      Цитата
                      Что значит "сразу"? Если ты унаследуешь свой класс исключения от одного из указанных - то исключение с таким классом будет ловиться обработчиками исключений всех базовых классов.

                      Я имел ввиду так
                      class MyException : public std::exceptiom , public CException
                      {
                      .....
                      };
                        Можешь и так.
                          Цитата
                          Flex_Ferrum, 11.12.03, 10:04
                          Можешь и так

                          А как тогда такой класс использовать?
                            Как и любой другой. А в чем сложности?
                              Цитата
                              Flex_Ferrum, 15.12.03, 10:23
                              Как и любой другой. А в чем сложности?

                              я имел ввиду, будет ли он обрабатывать исключений MFC и стандартные исключения с++?
                                Должен.
                                  Цитата
                                  Flex_Ferrum, 16.12.03, 16:33
                                  Должен

                                  А как узнать какое исключение сработало, MFC или стандартное с blink.gif
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0303 ]   [ 16 queries used ]   [ Generated: 3.05.24, 10:15 GMT ]