JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=70a2236e8e8ea206b3a8b600076cf86aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Verschiedene Exceptions durch Mehrfachvererbung abfangen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mat
Senior JLI'ler


Alter: 35
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 25.05.2007, 16:06    Titel: Verschiedene Exceptions durch Mehrfachvererbung abfangen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 25.05.2007, 20:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mat
Senior JLI'ler


Alter: 35
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 25.05.2007, 21:06    Titel: Antworten mit Zitat

Smile Super Idee!

Ich denke damit komme ich gut weiter Wink
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 37
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 27.05.2007, 08:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Mat
Senior JLI'ler


Alter: 35
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.05.2007, 13:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum