Re: ExceptionHandler class & list of error messages ?
First, please put your responses below or inline the message you are
responding to. That's the custom here.
Here is a version of the code that works. Because i found it really
interesting (I quite a few new tricks) I thought I would post a
complete version that compiles and runs. Hopefully doing all the
changes you mentionned. I just removed const. Not sure it was really
necessary but this way i could make your first version of the code
work.
Thank you again your help -
#include <iostream>
#include <deque>
#include <map>
#include <exception>
class TException : public std::exception
{
public:
enum errorCode
{
kTest1 = 1,
kTest2 = 10,
kTest3 = 12,
kTest4 = 20
};
// error severity levels
//
// #define RIE_INFO 0
// #define RIE_WARNING 1
// #define RIE_ERROR 2
// #define RIE_SEVERE 3
enum severityLevel
{
kInfo = 0, // Rendering stats and other info
kWarning, // Something seems wrong, maybe okay
kError, // Problem. Results may be wrong
kSevere // So bad you should probably abort
};
// error handlers codes
//
// #define RIE_ERRORIGNORE 0
// #define RIE_ERRORPRINT 1
// #define RIE_ERRORABORT 2
enum handlerCode
{
kErrorIgnore = 0,
kErrorPrint,
kErrorAbort,
};
typedef std::map<TException::errorCode, const char*> MsgMap;
public:
TException( TException::errorCode code, TException::handlerCode
handler =
kErrorIgnore, TException::severityLevel severity = kInfo ) :
m_error( code ),
m_severity( severity ),
m_handler( handler )
{}
~TException() throw() {}
const char* what() const throw()
{
return myMsgMap[ m_error ];
}
private:
TException::errorCode m_error;
TException::handlerCode m_handler;
TException::severityLevel m_severity;
static MsgMap myMsgMap;
};
class MsgMapInitializer
{
TException::MsgMap m_;
public:
operator TException::MsgMap() const { return m_; }
MsgMapInitializer& Add( TException::errorCode error, const char * msg
)
{
m_[ error ] = msg;
return *this;
}
};
TException::MsgMap TException::myMsgMap = MsgMapInitializer()
.Add( TException::kTest1, "test1" )
.Add( TException::kTest2, "test2" )
.Add( TException::kTest3, "test3" );
int main()
{
try {
// throw something
throw( TException( TException::kTest1, TException::kErrorPrint,
TException::kWarning ) );
} catch( TException &e ) {
std::cout << e.what() << std::endl;
};
return 0;
}