异常的封装
这里展示的是自定义异常类,继承与exception
类。
#include <stdexcept>
namespace youren {
////////////////////////////////////////////////
class YR_Exception : public exception
{
public:
YR_Exception(const string& buffer);
YR_Exception(const string& buffer, int err);
~YR_Exception() throw();
//错误信息
virtual const char* what() const throw();
//获取错误码
int getErrCode(){ return _code;}
private:
void getBacktrace();
private:
string _buffer;
int _code;
};
}
其实现如下:
#include "util/YR_Exception.h"
#include <execinfo.h>
#include <string.h>
#include <stdlib.h>
#include <cerrno>
namespace youren
{
YR_Exception::YR_Exception(const string &buffer)
:_buffer(buffer), _code(0)
{
}
YR_Exception::YR_Exception(const string &buffer, int err)
{
_buffer = buffer + " :" + strerror(err);
_code = err;
}
YR_Exception::~YR_Exception() throw()
{
}
const char* YR_Exception::what() const throw()
{
return _buffer.c_str();
}
void YR_Exception::getBacktrace()
{
void * array[64];
int nSize = backtrace(array, 64);
char ** symbols = backtrace_symbols(array, nSize);
for (int i = 0; i < nSize; i++)
{
_buffer += symbols[i];
_buffer += "\n";
}
free(symbols);
}
}