Ich füge ein bisschen Tracing- und Debugging-Code in eine Klasse ein, die ich gerade überarbeite.
Ich habe eine Trace
Objekt, das über einige Filtereigenschaften und -methoden verfügt bool CanTrace(Level, , TracePropertyList = no_additional_properties)
y bool Trace(Level, string, TracePropertyList = no_additional_properties)
.
Es gibt bereits viele Stellen im Code, an denen dieses Trace-Objekt verwendet wird, und das String-Argument der Trace
Methode ist in der Regel ein Ausdruck, den ich nicht auswerten möchte, wenn ich nicht am Ende Informationen zur Ablaufverfolgung ausgeben möchte.
Wiederholung des Codestücks
if(trace.CanTrace(LEVEL_INFO, some_props))
trace.Trace(LEVEL_INFO, consume_time().to_str(), some_props);
ist hässlich, und ich hätte gern etwas Kürzeres.
Ich habe über die Makros nachgedacht
#define TRACE_WITH_PROPS(LEVEL,STRING,PROPS) //...
y
#define TRACE(LEVEL,STRING) //...
Gibt es eine bessere Möglichkeit, dies zu tun? Möglicherweise mit Vorlagen oder C++11? Ich mag es nicht, Dinge mit Defines vor dem Compiler zu verstecken, und ich tue mein Bestes, um einige Makros an anderer Stelle in dieser Codebasis zu entfernen.