C ++ базовая строка исключение - PullRequest
1 голос
/ 22 июля 2011

Если я просто хочу выбросить строку, нет ли где-нибудь встроенного типа, чтобы я мог просто сделать

throw standard_exception("This is wrong!");

Или я должен определить такое стандартное исключение, которое происходит из исключениясебя?Я знаю, что это очень просто сделать, я просто подумал, что это будет настолько распространенным явлением, что это будет где-то определено.

Спасибо

Ответы [ 4 ]

6 голосов
/ 22 июля 2011

Если вы хотите выбросить строку, вы можете сделать это, просто написав

throw "I'm throwing a string!";

Однако это не очень хорошая идея, поскольку не рекомендуется использовать такие вещи, как char* s, как исключения. Если вы хотите заключить строку в исключение какой-либо формы, вы всегда можете просто использовать runtime_error или logic_error:

throw logic_error("This is wrong!");
throw runtime_error("This is wrong!");
6 голосов
/ 22 июля 2011

std::runtime_error и std::logic_error (оба получены из std::exception) имеют конструкторы, которые принимают строки и переопределяют функцию-член what() для возврата предоставленной строки.

4 голосов
/ 22 июля 2011

Ошибка выполнения должно быть то, что вы ищете

throw runtime_error("This is wrong");
1 голос
/ 22 июля 2011

Вы можете выбросить std::runtime_error или создать свой собственный класс, который наследует от std::exception следующим образом

#include <exception>
#include <string>


class myexcept : public std::exception
{
private:
  /**
   * Reason for the exception being thrown
   */
  std::string what_;

public:
  /**
   * Class constructor
   *
   * @param[in] what
   *    Reason for the exception being thrown
   */
  myexcept( const std::string& what ) : what_( what ){};


  /**
   * Get the reason for the exception being thrown
   *
   * @return Pointer to a string containing the reason for the exception being thrown
   */
  virtual const char* what() const throw() { return what_.c_str(); }


  /**
   * Destructor 
   */
  virtual ~myexcept() throw() {}
};

Бросить

throw myexcept( "The reason goes here" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...