LOGen von beliebig vielen Argumenten
Fehlt noch ein letzter Schritt - der erstaunlicherweise ganz einfach war und ausserdem noch ein ganz anderes Problem löste...
Zuerst die Implementierung:
#define LOG(what, variableArguments...) \ [[Log sharedLog] logObjcType:@encode(typeof(what)) \ arguments:(void *)what , ##variableArguments] - logObjcType:(char *)typeString arguments:(void *) what, ...; { id formatString = [self stringFromType:typeString inValue:what]; va_list variadicArguments; va_start(variadicArguments, what); id logString = [[[NSString alloc] initWithFormat:formatString arguments:variadicArguments] autorelease]; va_end(variadicArguments); return [self log:logString]; }
Eigentlich hatte ich hier mehr Probleme erwartet.
Ganz nebenbei löst das auch noch ein Problem von ganz zu Anfang:
LOG(@"%@", [NSString stringWithFormat:@"%s,%s", "fnord", "fnord"]);
Das macht jetzt keine Probleme mehr, da die zusätzlichen Komas vom Präprozessor (fälschlicherweise) als zusätzliche Argumente zur dem variadischen Makro aufgefasst werden. Hehe...
Jetzt fehlt nur noch ein Backend für den Logger und ich bin glücklich. Andererseits... da gibt es natürlich auch Log4Cocoa das ich einfach erweitern könnte.
Hm. Mal schauen.
