1. C++ / Говнокод #18565

    +3

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    namespace {
    
    class blah_error : public std::exception
    public:
        blah_error(const char *text)
            : m_text(text)
        {}
    
        virtual const char *what() const throw()
        { return m_text; }
    
    private:
        const char *m_text;
    };
    
    }
    
    BlahApplication::BlahApplication(const some_type &some_arg)
    {
      // ...
      if (SomeCheck(some_arg)) {
        throw blah_error("some error message");
      }
      // ...
    }

    Запостил: Setry, 03 Августа 2015

    Комментарии (9) RSS

    • std::string some_error_message(...);
      throw blah_error(some_error_message.c_str()); // oops...
      Ответить
    • Любителям этого говнокода также может понравиться
      http://govnokod.ru/13201
      .
      Ответить
    • Меня ещё смущает определение типа blah_error: он выбрасывается из функции, которая может быть вызвана в другом cpp файле, но поймать его там можно будет только как std::exception.
      Ответить
      • > как std::exception
        Как std::exception &, тогда уж...
        Ответить
      • Да, это выглядит странно. Тогда уж проще было кидать что-нибудь из <stdexcept>
        Ответить
        • Походу, автор не знал про набор классов из stdexcept, а сообщение как-то надо было передать... Вот он и сделал этот приватный велик.
          Ответить

    Добавить комментарий