Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
02.09.2001, 00:58
Prefect



Eigentlich verwende ich C++ ja nur als besseres C, und vermeide daher die etwas esoterischen Aspekte wie Exceptions. Leider kann ich eine Fehlfunktion eines Konstruktor ja nur per throw; anzeigen, deswegen komm ich da nunmal in diesem Ausnahmefall nicht drumrum.

Ich hab mir nun gedacht, um diese Exceptions etwas netter abfangen zu können schreibst du dir ein Makro. Dieses Makro sieht so aus:

Quellcode:
#define NEW(cls,params) \
({cls *__p; try { __p = new cls params; } catch(...) { __p = 0; }; __p;})

Verwendet wird es so:

Quellcode:
return NEW(CExSprite,(fname));

Das funktioniert so weit auch, nur leider wird aus irgendeinem seltsamen Grund der catch()-Teil des Makros nicht ausgeführt, d.h. das Programm beendet sich einfach :|

Hoffentlich habe ich einen offensichtlichen Fehler übersehen und versuche nicht wieder was unmögliches.

Ach ja, für die Makro-unkundigen: Dieses ({ })-Konstrukt ist ein netter Trick, um ein Makro (edit: ein Makro mit mehreren Statements und lokalen Variablen) einen Wert zurückgeben zu lassen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.


Dieser Beitrag wurde am 02.09.2001 um 01:02 von Prefect bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
02.09.2001, 01:11
Prefect



Okay.. was zum Teufel soll der Scheiß? Wenn ich ein reines throw; verwende, passiert das oben genannte Problem.

Wenn ich aber throw irgendeine_struct(); mache, funktioniert alles wie es soll!

Nun gut, reines throw; ist ja eigentlich zum "rethrow" einer Exception, aber trotzdem *grummel*. Wie wärs mit nem void-Typ zum Werfen? Bloß woher nehmen bei der C++-Syntax..

Zum Mond sollte man sie schießen, diese C++ler. *GRR*

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.


Dieser Beitrag wurde am 02.09.2001 um 01:24 von Prefect bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
02.09.2001, 01:26
TheTinySteini



Strange...
Allerdings, an einer Stelle der MSDN hab ich dies hier gefunden:
"Ein throw-Ausdruck ohne Operand löst erneut die Ausnahme aus, die gerade behandelt wird."

Du kannst aber soweit ich das verstanden hab auch einfach nen String als Parameter an throw übergeben, und dann catch( char* str ) machen. dann kannste den str auch auswerten und damit zwischen verschiedenen Ausnahmen unterscheiden... glaub ich *g*

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
003
02.09.2001, 01:45
Prefect



Genau das gleiche habe ich auf GameDev auch gerade erfahren. Eigentlich dürfte das "throw;" ja gar nicht legal sein, da man außerhalb von catch() { } gar keine Exception erneut werfen kann, aber nachdem es erfolgreich kompiliert wurde... nunja.

Ein String ist glaub ich keine gute Idee (wegen Speicherbelegungsproblemen), aber ein int geht ja genauso.

Das ist zwar lächerlich, weil ich diesen int nie irgendwie weiterverwenden werde (was will ich in dem Makro auch damit?), aber was solls.

In der Tat, C++ ist in manchen Bereichen ein Rückschritt :| Die Sprache ist einfach nicht mehr so schön wie reines C.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
02.09.2001, 01:53
TheTinySteini



*g*

Sei doch froh, dass du überhaupt sowas hast wie try catch und throw. Sonst müssest du selber probieren, fangen und werfen. Und das wäre ja Sport =)

... ich schweife ab, aber das ist glaub ich gut so.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
005
02.09.2001, 02:56
Another1



löl, prefect du hast probleme ;)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
006
02.09.2001, 18:48
Prefect



Man kann bei dem Ganzen auch gute Seiten sehen. Immerhin habe ich hiermit nach vielen Jahren endlich den ersten Vorteil von Turbo Pascal gegenüber C++ entdeckt :)
Da konnte man aus Konstruktoren nämlich einfach per fail oder so rausspringen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
007
02.09.2001, 18:58
TheTinySteini



w00t!

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
008
02.09.2001, 21:28
Kriz



Hm, leider zu spät gelesen. Aber so isses nunmal...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche