|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 25.05.2007, 15:06 Titel: Verschiedene Exceptions durch Mehrfachvererbung abfangen |
|
|
Hey,
ich benutze derzeit mehrere Bibliotheken in meinem Projekt, wobei nahe zu jede ihre eigene Klasse für Exceptions implementiert hat.
Da ich es nicht wirklich schön finde, manchmal 3-4 verschieden Catch-Anweisungen auszuführen, würde ich gerne meine eigene Exception-Klasse implementieren, welche zu allen anderen kompatible ist.
Mein erster Gedanke war, dass ich dazu mehrfach Vererbung verwende, damit meine Klasse anspringt, wenn eine Exception eines anderen Typs gewurfen wurde.
Ich bin mir nur nicht sicher ob dies die Beste Lösung ist, und ob jemand vielleicht einene Vorschlag für eine andere Lösung hat - z.B. Templates ? _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 25.05.2007, 19:39 Titel: |
|
|
ich könnte mir vorstellen, dass du sowas wie implizites Casting verwenden könntest. Also, nehmen wir mal an deine Klasse heißt multiExc und zwei andere Klassen in den Libs heißen libExc und badLibX. Dann entwirfst du deine Klasse so, dass sie mehrere Konstruktoren hat, die ein Objekt dieser Klasse aus den jeweiligen anderen Exceptionklassen konstruieren, in etwa so: CPP: | class multiExc
{
public:
multiExc();
multiExc( const libExc& exc );
multiExc( const badLibX& exc );
// andere Klassen elemente...
}; |
Da kannst du dann auch jede Art Ausnahme für sich behandeln, wenn z.B. libExc die Information in einem std::string hat und badLibX z.B. in einem char-Array, je nachdem.
BTW: Dieses implizite Casting hat in diesem Fall übrigens einen Vorteil, da es ja von mehreren Leuten logischerweise eher als Nachteil angesehn wird. Um soetwas zu vermeiden würde man normalerweise den Konstruktor explizit deklarieren, ungf. so: CPP: | class xyz
{
public:
explicit xyz( int i );
}; | Aber das nur nebenbei
Gruß DXer |
|
Nach oben |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 27.05.2007, 07:53 Titel: |
|
|
Ja, aber das ist eine seltsame Lösung, die merkwürdige Abhängigkeiten erzeugt und ziemlich statisch ist. Was spricht gegen den "klassischen" Weg neue Exception-Klassen von 'std::exception' abzuleiten? Bzw. von bereits von 'std::exception' abgeleiteten Exceptions abzuleiten? Man kan so wunderschön Exception-Bäume aufspannen und keine Exception weiß mehr von ihren Nachbarn, als dass sie den selben Basistyp haben.
Und wenn du z.B. nur den Fehlerstring brauchst, brauchst du im Catch-Block auch nur 'std::exception' fangen, da alle Exceptions davon abgeleitet sind (auch die der Standard-Bibliothek), allerdings hast du dann immer noch die Option eine spezielle (auch abgeleitete) Exception explizit zu behandeln, also wunderbar. Und Tipparbeit sparen ist doch nicht wirklich ein Argument, für schlechte(re)s Design, zumal es eben in diesem Fall auch sehr elegant und schlank geht. |
|
Nach oben |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.05.2007, 12:16 Titel: |
|
|
Prinzipiell ist das sehr schön. Dabei habe ich nur das Problem das ich gerne auch CEGUI::Exceptions abfangen würde, die nicht von std::exception abgeleitet sind.
Ich denke das ich dies löse, indem ich meine eigene Execption Klasse von CEGUI::Exception und std::exception ableite. _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|