Compare commits

..

4 commits

Author SHA1 Message Date
97b60f5cb9 fix reserved macro, reorder members, adds virtual destructor 2022-09-05 18:53:25 +02:00
c78ce64273 fix string management
- Adds the class name as a constructor parameter.
2022-08-29 18:13:23 +02:00
2f9d1b7a1f fix const correctness 2022-08-29 17:26:25 +02:00
269539741c fix: move header in subdir 2022-08-29 17:13:59 +02:00
3 changed files with 23 additions and 16 deletions

View file

@ -19,7 +19,7 @@ Example
#include <iostream> #include <iostream>
#include <iomanip> #include <iomanip>
#include "exceptions.h" #include <exceptions/exceptions.h>
// Use this macro to build up your hierarchy of exceptions // Use this macro to build up your hierarchy of exceptions
EXCEPTION( Exception, Existential_Observation ); EXCEPTION( Exception, Existential_Observation );

View file

@ -5,7 +5,7 @@
#include <sstream> #include <sstream>
#include <stdexcept> #include <stdexcept>
#include "exceptions.h" #include "exceptions/exceptions.h"
// Use this macro to build up your hierarchy of exceptions // Use this macro to build up your hierarchy of exceptions
EXCEPTION( Exception, Existential_Observation ); EXCEPTION( Exception, Existential_Observation );

View file

@ -1,5 +1,6 @@
#ifndef __EXCEPTIONS_H__ #pragma once
#define __EXCEPTIONS_H__ #ifndef EXCEPTIONS_H
#define EXCEPTIONS_H
#include <string> #include <string>
#include <sstream> #include <sstream>
@ -19,7 +20,7 @@
EXCEPTION(Exception,Buddhist_Observation); EXCEPTION(Exception,Buddhist_Observation);
creates an new exception class "Buddhist_Observation", derived from the base "Exception" creates an new exception class "Buddhist_Observation", derived from the base "Exception"
*/ */
#define EXCEPTION(Super,Current) class Current : public Super {public: Current ( const std::string & desc, const std::string & func="?", const std::string & f="?", const int l=-1 ) : Super (desc,func,f,l) {name = #Current;} } #define EXCEPTION(Super,Current) class Current : public Super {public: Current ( const std::string & desc, const std::string & func="?", const std::string & f="?", const int l=-1, const std::string & n=#Current ) : Super (desc,func,f,l,n) {} }
/** A shortcut to throw an exception without having to type ",E_INFOS" /** A shortcut to throw an exception without having to type ",E_INFOS"
@ -35,8 +36,6 @@
class Exception : public std::exception class Exception : public std::exception
{ {
protected: protected:
//! Name of the current exception class
std::string name;
//! Description of the exception //! Description of the exception
std::string description; std::string description;
@ -50,6 +49,12 @@ protected:
//! Line where the exception has been raised //! Line where the exception has been raised
int line; int line;
//! Name of the current exception class
std::string name;
//! Assembled message
std::string message;
public: public:
//! Constructor of the exception //! Constructor of the exception
/*! /*!
@ -59,21 +64,23 @@ public:
Use the E_INFOS macro to raise the exception, for example : Use the E_INFOS macro to raise the exception, for example :
throw( Exception( "Shit evolves", E_INFOS ); throw( Exception( "Shit evolves", E_INFOS );
*/ */
Exception( const std::string & desc, const std::string & func, const std::string & f, const int l ) Exception( const std::string & desc, const std::string & func, const std::string & f, const int l, const std::string & n = "Exception" )
: description(desc), function(func), file(f), line(l) {} : description(desc), function(func), file(f), line(l), name(n)
{
std::ostringstream msg;
msg << "<" << name << "> " << description << "\t\t" << function << " @ " << file << ":" << line << "";
message = msg.str();
}
//! The destructor is not allowed to throw exceptions //! The destructor is not allowed to throw exceptions
virtual ~Exception() throw () {} virtual ~Exception() noexcept {}
//! The method to use for printing the complete description of the exception //! The method to use for printing the complete description of the exception
std::string what() const char* what() const noexcept
{ {
std::ostringstream msg; return message.c_str();
msg << description << " (<" << name << "> in " << function << " at " << file << ":" << line << ")";
return msg.str();
} }
}; };
#endif // __EXCEPTIONS_H__ #endif // EXCEPTIONS_H