#ifdef DEBUG mit templates?
-
hallo, um meinen code besser
zu struktuieren, wollte ich eine klasse schreiben, welche
debuginfos sammelt, diese soll natürlich zu nichts zerfallen,
wenn man debugging deaktiviert, mein ansatz war folgender :template <bool> struct FillInDecodingInfos { void addDebugInfos(double info1, double info2, DebugInfo& info); }; template <> struct FillInDecodingInfos<true> { void addDebugInfos(double info1, double info2, DebugInfo& info) { info.var1 = info1; info.var2 = info2; } }; template <> struct FillInDecodingInfos<false> { void addDebugInfos(double info1, double info2, DebugInfo& info) {} };die klasse DebugInfo ist dann genauso geschrieben, also leer bei false
und ein paar variablen zum sammeln bei true,meine Frage ist nun, ob solche konstrukte wirklich zu nichts zerfallen,
oder ob ich damit overhead erzeuge, welchen ich bei präprozessor-gefummel
nicht hätte
-
Nicht damit du noch weiter abrutschst und am Ende gar keine Antwort bekommst, so gebe ich dir jetzt eine, welche zwar vielleicht nicht ganz zufrieden stellt.
Ich denke es wir von Compiler zu Compiler unterschiedlich sein, wieviel da wegoptimiert wird und somit die Klasse gestrichen oder nicht. Ich persönlich würde sowas anders lösen, damit es im Release-Modus wirklich weg ist.
#ifdef _DEBUG void add_debug_infos(double dInfo1, double dInfo2, DebugInfo& rInfo) { // Mach irgendwas. } #define ADD_DEBUG_INFOS(x, y, z) add_debug_infos(x, y, z) #else #define ADD_DEBUG_INFOS(x, y, z) #endifUnd die Verwendung sehe folgendermasen aus:
// Irgendwo in einer Funktion ADD_DEBUG_INFOS(1.0, 2.0, MyInfo); // Oder halt andere ParameterWenn
_DEBUGnicht definiert ist, dann bleibt bei der verwendeten Zeile wirklich nichts anderes mehr übrig als ein Semikolon und das bevor der Compiler etwas sieht.Grüssli