Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C++ Komfort-Exception

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.02.2019, 12:17 Uhr
plip



Hallo Zusammen,

ich stehe öfter vor dem Problem, dass ich beim werfen einer (STL) Exception gerne ein paar Zusatzinformationen mitgeben möchte. Diese baue ich dann umständlich per Stringstream zusammen. Ich hätte aber gerne einen Einzeiler am liebsten ohne irgendwelche Makros zu basteln. Ist es möglich eine von std::runtime_error abgeleitete Klasse zu implementieren, mit der ein Aufruf in folgenden Formen möglich ist:


C++:
MyException::throw("Simple Exception");




C++:
int errorCode = 42
MyException::throw("Exception with details") << "Error code: " << errorCode;



Die gesamte Information soll per std::runtime_error.what() verfügbar sein. Meine bisherigen Basteleien waren nicht erfolgreich...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.02.2019, 13:35 Uhr
plip



Das geht natürlich auch Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.03.2019, 18:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

ja das geht.

Du musst deiner abgeleiteten Exceptionklasse nur einen Streamingoperator spendieren, so in der Art:


C++:
template< class Streamable >
MyException& operator<<( const Streamable& x )
{
                std::ostringstream o;
                o << x;
                m_what += o.str();
                return (*this);
}



wobei m_what der std::string ist, denn man dann bei der überschriebenen what() methode zurückgeben sollte.

Aufruf/Wurf geht dann z.b so:


C++:
throw MyException("Allgemeiner Text") << " und das wird noch hinzugefügt" << 123 << " Beispiel";



Achja, imho wird empfohlen, nicht von den spezialisierten Klassen (runtime_exception, ...) abzuleiten, sondern nur direkt von der basis (std::exception)
--
class God : public ChuckNorris { };

Dieser Post wurde am 05.03.2019 um 18:58 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: