Funktion optimieren?
-
Hi,
ich hab ne Funktion die recht unsauber ist:
std::string MESSAGE_ERROR (char *Message, char* FileName, int Line, char* Function) { std::string Buffer; char buffer[10]; sprintf(buffer, "%d", Line); Buffer = "ERROR:"; Buffer += Message; Buffer += "\n("; Buffer += RemoveDirNames (FileName); Buffer += ", line "; Buffer += buffer; Buffer += ", function "; Buffer += Function; Buffer += "(); )\n"; return Buffer; }
ich rufe diese so auf:
void bla (void) { throw MESSAGE_ERROR ("blub", __FILE__, __LINE__, __FUNCTION__); }
nun 2 sachen:
1. Wie könnte man diese Funktion Optimieren?
2. gibt es noch ne andere Möglichkeit an die werte wie __FILE__ und cozu gelangen, außer immer diese ganzen Parameter einzutragen? (Default-Wert funzt net)
-
Hm, zumindest für den ersten Wert könntest du schon im Funktionskopf std::string
nehmen, bei den anderen bin ich mir jetzt nicht sicher, könnte aber auch gehen.Und theoretisch müsstest du die Message in einem Statement zusammensetzen können.
Devil
-
du solltest keinen std::string als Ausnahme schmeißen! schreib lieber eine spezielle error Klasse, die du von std::runtime_error ableitest und denk an const-correctness
#include <stdexcept> struct message_error : public std::runtime_error { message_error(const char *Message, con st char* FileName, int Line, const char* Function); }; //...
-
Original erstellt von <__LINE__>:
ich hab ne Funktion die recht unsauber ist:Du könntest Dir das sprintf sparen und einen stringstream nehmen, aber sonst?
kingruedis Vorschlag beachten!
Das mit den __xxx__ muß so bleiben, da nur das Einsetzen am Aufrufort die richtigen Werte bringt. Defaultparams beziehen sich dann auf die Stelle wo sie stehen, also den Header... und innerhalb der Funktion auf die .cpp, wo die Funktion ausprogrammiert wird.
-
void bla (void) { throw MESSAGE_ERROR ("blub", __FILE__, __LINE__, __FUNCTION__); }
wir zu
#define MERR(a,b) MESSAGE_ERROR(a,__FILE__,__LINE__,b) void bla (void) { throw MERR ("blub", __FUNCTION__); }
__FUNCTION__ hab ich nicht ersetzt, weil ich das nicht kenne.
-
@volkard
Was soll das Bringen ?
Würde gerne mal den Sinn dahinter verstehen...Devil
[ Dieser Beitrag wurde am 11.06.2003 um 11:34 Uhr von devil81 editiert. ]
-
Original erstellt von volkard:
__FUNCTION__ hab ich nicht ersetzt, weil ich das nicht kenne.Ist neu im VC7, enthält immer den aktuellen Funktionsnamen.
Klingt brauchbar, oder?
-
Original erstellt von devil81:
@volkard
Was soll das Bringen ?Der Schreibaufwand wird drastisch nur auf das nötigste Reduziert. Rein Code-Technisch gesehn gibt es nach dem Präprozessor keinen Unterschied mehr. Aber Volkard hat recht mit der kleinen Korrektur. Nichts schlimmeres als 100mal die selben Parameter der selben Funktion zu übergeben. (o:
-junix