LINUX.ORG.RU

Как правильно наследовать от std::exception ?


0

0
Есть несколько классов исключений , чтоб не разводить
несколько "catch-ей" решил унаследовать их от std::exception
и перехватывать как ссылку на родителя .
Напр.

#include <exception>
#include <iostream>

class my_exception:public std::exception{
public:
my_exception(const char* str)throw():error_message(str){}
virtual ~my_exception()throw(){}
virtual const char* what()throw(){return error_message.c_str();}
private:
std::string error_message;
};


int main()
{
try{
throw my_exception("MY_EXCEPT");
}catch(std::exception& err){
std::cout<<err.what()<<std::endl;
return 0;
}
}


метод what() возвращает название класса , в моём случае
"12my_exception" независимо от error_message.
Какая сигнатура должна быть у what() ?
Заранее спасибо .
★★★
Ответ на: комментарий от GPFault
Спасибо тебе добрый человек :-)
kitov ★★★
() автор топика
И лучше убери throw() с конструктора, у тебя там может вылететь исключение, если памяти не хватит, и всё молча грохнется.
Legioner ★★★★★
()
Ответ на: комментарий от Legioner
сразу и не заметил что ты о конструкторе говорил, подумал что о what
aton
()
Ответ на: комментарий от fghj
>почему просто не использовать std::runtime_error?

Есть пара классов исключений , которым я передаю
статус ошибки из сишных функций.
kitov ★★★
() автор топика
Ответ на: комментарий от cobold
>Странный код.

Что именно ?
kitov ★★★
() автор топика
Ответ на: комментарий от Legioner
>И лучше убери throw() с конструктора, у тебя там может вылететь исключение, >если памяти не хватит, и всё молча грохнется.

Ок
kitov ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.