S
vielen Dank für die Tipps
hustbaer schrieb:
Zu Frage 1:
Variante 2, also
"(Deklaration und Initialisierung von Variablen an den Stellen, an dem sie das erste mal benötigt werden.)"
Aber kann das nicht ggf. Fehler provozieren? Ich denke an sowas:
void meineFunktion()
{
... code ...
int a = 5;
... code ...
if (irgendwas)
{
... code ...
int b = 6;
... code ...
}
... code ...
int c = a + b; // --> Fehler, da b nur in der if-Schleife gültig war.
}
...naja wahrscheinlich trifft sowas selten zu.
hustbaer schrieb:
Bzw. man kann natürlich immer eins machen: jede einzelne Funktion der C-Libary erstmal in eine eigene Funktion einwickeln, in der man Exceptions wirft wenn Dinge schief gehen. Und aus denen baut man dann seine "komplexeren" Funktionen auf.
Jap. Ist gerade in Arbeit ;).
hustbaer schrieb:
Zu Frage 6:
Kommt drauf an. Ist der Wert "optional", dann "leeren" Wert zurückgeben (wobei wieder abhängig vom Typ und erlaubten Bereich des Wertes sein kann dass man sowas wie boost::optional braucht).
Und mit "optional" meine ich einfach dass es kein Fehler ist wenn der Wert leer ist, und dass es gut denkbar ist dass der Aufrufer mit der Info "Wert ist leer" sinnvoll weiter arbeiten kann.
Ich glaube so eine ähnliche Frage hatte ich vor kurzem auch schon mal angestoßen. Ja bei mir sind die meisten getter eher optional und dürfen scheitern. Bei kritischen Fehlern, die den Programmfluss stören können, werden allerdings exceptions geworfen. Die ganze Sache mit der Fehlerbehandlung ist da auch nicht immer so einfach. Habe hier eine gute Gegenüberstellung gefunden: (http://www.codeproject.com/Articles/38449/C-Exceptions-Pros-and-Cons).
Boost ist an sich eine gute Ergänzung, aber da ich diese momentan nicht benötige, wollte ich es jetzt auch nicht zwingend einbinden.
hustbaer schrieb:
String-Literals schmeissen ist ganz pfui, lass das.
Meinst du damit den return von 'const char *'? Ist das Problematisch? Sollte ich lieber immer einen std::string zurückgeben?
hustbaer schrieb:
bool TryGetBlub(params, std::string& out_blub, std::string& out_errorMessage)
{
// ...
}
std::string GetBlub(params)
{
std::string blub;
std::string errorMessage;
if (!TryGetBlub(params, blub, errorMessage))
throw std::runtime_error("Could not get blub: " + errorMessage);
return blub;
}
Ha, das ist super. Die Idee ist mir noch gar nicht gekommen es so zu machen
------------------------------------------
Naja so hat wohl jeder sein Programmierstil.
Es ist aber interessant zu sehen, was es da so alles gibt (google: 'filetype:cpp').
vielen Dank nochmals