Howdi.
ich habs nicht als Angriff gesehen
Also wenn du sowieso nach jeder Funktion die ein false zurück liefert eine Fehlerausgabe machst wäre es da nicht besser ein vernünftiges ExceptionSystem zu basteln oder gar gleich eine direktere Fehlerbehandlung?
Deine Variante erscheint mir etwas.. seltsam, zb würde ich dies an deinem Beispiel verdeutlichen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
bool CCharakter::Func_Erhöhe_Koerperkraft()
{
if (i_AttributPunkte)
{
i_Koerperkraft++;
fl_TragKraftMax = i_Koerperkraft * 2000.0f;
i_AttributPunkte--;
return true;
}
else
{
// Keine Punkte zum Erhöhen
*Fehler = St_FehlerCode::FC_CHAR_KEINEATTRIBUTSPUNKTE;
return false;
}
}
|
Würde ich da eher so schreiben:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
|
void CCharakter::Func_Erhöhe_Koerperkraft()
{
if (i_AttributPunkte == 0)
throw NoAttributePointsException();
i_Koerperkraft++;
fl_TragKraftMax = i_Koerperkraft * 2000.0f;
i_AttributPunkte--;
}
|
oder so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
void CCharakter::Func_Erhöhe_Koerperkraft()
{
if (i_AttributPunkte == 0)
{
OnError(St_FehlerCode::FC_CHAR_KEINEATTRIBUTSPUNKTE);
return;
}
i_Koerperkraft++;
fl_TragKraftMax = i_Koerperkraft * 2000.0f;
i_AttributPunkte--;
}
|
Es ist natürlich eine grosse Portion persönlicher Geschmack dabei, aber diese Varianten hätten den Vorteil das nicht extra mit FehlerCode Pointern gearbeitet werden muss und auch Mechaniken verwendet werden die genau für die Fehlerbehandlung erzeugt wurden. Auch ist die Fehlercode Behandlung nicht wirklich ein Teil deiner Karte, bzw es sollte nicht die Aufgabe der Karte sein die Fehlerbehandlung zu übernehmen. Aus diesem grund würde ich auch eher die 2. variante bevorzugen wenn diese Fehler an den Benutzer gemeldet werden müssen.