Interne Umwandlung short->bool - wie?
-
Hallo!
Ich habe eine Funktion, die zur Fehlerrückmeldung ein short zurückgibt. also return 1; für Erfolg und alles andere für Fehler.
Nur kann ich damit keine Abfrage nach diesem Schema machen:
if(!foo()) { // Fehler }
Da anscheinend nur die 0 zu false umgewandelt wird! Gibt es eine andere Möglichkeit (außer Exceptions), um differenzierte Fehlermeldungen zurück zugeben?
Auch, dass einfache Umdrehen der Fehlerabfrage finde ich nicht so gut, da
if(foo()) { // Fehler }
nicht wirklich intuitiv ist
-
if(foo()!=1) //fehler
aber ich verstehe den Sinn nicht. Was spricht gegen Exceptions?
Oder gegen das allgemeingültige: 0 == SUCCESS, !0 == ERROR ?
-
Bau ne Funktion, die das Ergebnis der anderen Funktion als Parameter hat und returne jenachdem was true und was false ist das jeweils richtige
mfg
Glamdring
-
zu spät
-
Man könnte auch schreiben:
if(foo()-1)
-
Ich seh die Logik irgendwie auch nicht ... warum gerade 1 für Erfolg? Ist 0 auch ein Fehlercode? Mir persönlich wärs egal, weil ich von der impliziten Umwandlung nach bool nicht besonders viel halte
-
d.h. ich kann, wenn ich verschiedene fehlercodes haben möchte, nicht
if(!foo()) { /* Fehler */ }
nutzen?
Exceptions wollte ich bei meinem Projekt nicht nutzen, da ich in diesem Forum jede Menge schlechter Meinungen gelesen habe (Performance, etc.), obwohl ich sie von der Sache her besser finde, da ich vor allem die Möglichkeit Klassen als Exceptions zu nutzen gut finde. Nachteilig allerdings auch der größere Aufwand für den Nutzer der Klasse.
-
switch (foo()) { case 0: std::cout << "alles okay!" << std::endl; break; case 1: std::cout << "Nichts ist okay!" << std::endl; break; case 2: std::cout << "na Bluescreen?!" << std::endl; break; case 3: std::cout << "usw..." << std::endl; break; }
oder
short x = foo(); if (x == 0) { } else if (x == 1) { } else if (x == 2) { } usw...
-
noch vergessen:
umwandlung: short -> bool
if (foo() ? true : false) { }
casten kannste knicken
-
schade eigentlich!
dann werde ich das normale != 1 verwenden... Was tut man nicht alles für ein
bisschen genauere Fehlermeldungenedit: hab jetzt erst shades post gelesen.... vielleicht werde ich doch noch die exceptions nutzen... muss mal gucken wie viel aufwand es ist alles zu ändern
-
EnERgYzEr schrieb:
Exceptions wollte ich bei meinem Projekt nicht nutzen, da ich in diesem Forum jede Menge schlechter Meinungen gelesen habe (Performance, etc.), obwohl ich sie von der Sache her besser finde, da ich vor allem die Möglichkeit Klassen als Exceptions zu nutzen gut finde. Nachteilig allerdings auch der größere Aufwand für den Nutzer der Klasse.
-
exception haben theoretisch keinen overhead, praktisch gesehen leider dennoch einen kleinen
allerdings hast du mit deiner jetztigen 'lösung' auch einen ziemlichen overhead: sehr viele ifs -
der aufwand mit exceptions ist geringer als ohne
-
-
EnERgYzEr schrieb:
dann werde ich das normale != 1 verwenden... Was tut man nicht alles für ein bisschen genauere Fehlermeldungen
riesen blödsinn.
0 heisst: kein Fehler
!0 heisst: Fehler - und gibt den fehlercode anwarum willst du es anders machen?
-
argh!!!
(über mich selbst ärger)
ich war die ganze zeit in gedanken noch bei der if(!funk()) lösung. und das geht ja nur, wenn 1 == Fehler...
so jetzt gibts exceptions
-
EnERgYzEr schrieb:
so jetzt gibts exceptions
Eine weise Entscheidung.
-
es hat doch gar nicht mal sooo lange gedauert alles umzustellen (s. zeit)