.| 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:
Verwendet wird es so:
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, Widelands - Gemütliche Aufbaustrategie, Free Software Dieser Beitrag wurde am 02.09.2001 um 01:02 von Prefect bearbeitet. |
|
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, Widelands - Gemütliche Aufbaustrategie, Free Software Dieser Beitrag wurde am 02.09.2001 um 01:24 von Prefect bearbeitet. |
|
Profil || Suche |
|
002 02.09.2001, 01:26 TheTinySteini |
Strange... 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 |
|
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, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
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 |
|
Profil || Suche |
|
005 02.09.2001, 02:56 Another1 |
löl, prefect du hast probleme ;) --Another1 ...relaxing..atm =) |
|
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 :) cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
007 02.09.2001, 18:58 TheTinySteini |
w00t! --TheTinySteini |
|
Profil || Suche |
|
008 02.09.2001, 21:28 Kriz |
Hm, leider zu spät gelesen. Aber so isses nunmal... --K:R-I)Z++ |
|
Profil || Suche |

