CSANecromancer
Erfahrenes Mitglied
Hi Leute,
in meinem derzeitigen Projekt habe ich eine Utilityklasse mit verschiedenen Grafikfunktionen. In jeder Funktion findet vor der Verarbeitung eine ausführliche Parameterprüfung statt.
Beispielsweise gegeben ist:
Im Header:
Im Source:
wobei p_bmSource ein Pointer auf ein Bitmapobjekt ist und EGraphicsException eine selbst definierte Exceptionklasse.
(Das verwendete Rahmenwerk ist die VCL von Borland, was aber mit der eigentlichen Frage nach meinem Erachten nicht unbedingt etwas zu tun hat.)
Mein Problem ist jetzt folgendes:
Ich habe im Source ziemlich viele solcher Prüfungen. Und mich stört ein wenig, daß ich zu jeder Prüfung nach dem if() vier Zeilen brauche (geschw. Klammer auf, sprintf(), throw, geschw. Klammer zu). Mir wäre es sehr lieb, wenn ich den throw der Exception auf eine einzige Zeile verkürzen könnte.
Blöderweise muß ich die Fehlermeldungen manuell aufbauen und kann nicht einfach auf die reinen Exceptionmeldungen zurückgreifen. Ich muß also meinen Fehlerstring, der passende Platzhalter (%d, %s) beinhaltet, irgendwie (z.B. mit sprintf() ) zusammenbauen und dann an den throw weiterreichen.
Wenn sprintf() den fertig gebauten String als Rückgabewert zurückreichen würde (im Stile von char* sprintf(...) ), dann wäre das ja kein Problem.
Fällt jemandem eine Möglichkeit ein, wie ich auf einen Rutsch meinen Fehlerstring zusammenbauen und an den throw weiterreichen kann?
in meinem derzeitigen Projekt habe ich eine Utilityklasse mit verschiedenen Grafikfunktionen. In jeder Funktion findet vor der Verarbeitung eine ausführliche Parameterprüfung statt.
Beispielsweise gegeben ist:
Im Header:
Code:
#define GFX "TGraphicsControl"
#define GFX_GRAYSCALE "GrayScale(): "
#define GFX_GRAYSCALE_ERR003 "%s Empty source bitmap referenced.\nWidth: %d, Height: %d"
Im Source:
Code:
m_strError[256];
strcpy(m_strError, GFX);
strcay(m_strError, GFX_GRAYSCALE);
if ((p_bmSource->Width == 0) || (p_bmSource->Height == 0))
{
sprintf(m_strErrorBuffer,
GFX_GRAYSCALE_ERR003,
m_strError,
p_bmSource->Width,
p_bmSource->Height);
throw (EGraphicsException(m_pParent, m_strErrorBuffer));
}
(Das verwendete Rahmenwerk ist die VCL von Borland, was aber mit der eigentlichen Frage nach meinem Erachten nicht unbedingt etwas zu tun hat.)
Mein Problem ist jetzt folgendes:
Ich habe im Source ziemlich viele solcher Prüfungen. Und mich stört ein wenig, daß ich zu jeder Prüfung nach dem if() vier Zeilen brauche (geschw. Klammer auf, sprintf(), throw, geschw. Klammer zu). Mir wäre es sehr lieb, wenn ich den throw der Exception auf eine einzige Zeile verkürzen könnte.
Blöderweise muß ich die Fehlermeldungen manuell aufbauen und kann nicht einfach auf die reinen Exceptionmeldungen zurückgreifen. Ich muß also meinen Fehlerstring, der passende Platzhalter (%d, %s) beinhaltet, irgendwie (z.B. mit sprintf() ) zusammenbauen und dann an den throw weiterreichen.
Wenn sprintf() den fertig gebauten String als Rückgabewert zurückreichen würde (im Stile von char* sprintf(...) ), dann wäre das ja kein Problem.
Fällt jemandem eine Möglichkeit ein, wie ich auf einen Rutsch meinen Fehlerstring zusammenbauen und an den throw weiterreichen kann?