I wrote a Logger
class for dumping out information to files. The following code is a miniature of Logger
. The functions look almost the same... But I don't know how to simplify it. Can you make it more elegant?
My earlier version used varadic macros to achieve this goal. I later noticed that those two data, file pointer and indent level, could be encapsulated into a class, so that I don't need to pass (FILE *fp, size_t indent)
every time. (Xml_Logger &logger)
is enough.
So I hope I could just use member functions, otherwise it's like I'm rolling back...
void ind_print(const char *format, ...) {
print_indent();
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
void ind_println(const char *format, ...) {
print_indent();
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
printf("\n");
}
void print(const char *format, ...) {
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
void println(const char *format, ...) {
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
printf("\n");
}
UPDATE: Look at these two functions. I hope println
could invoke print
, but unfortunately it could not. Isn't it?
void Xml_Logger::print(const char *format, ...) const {
print_indent();
va_list args;
va_start(args, format);
vfprintf(fp, format, args);
va_end(args);
}
void Xml_Logger::println(const char *format, ...) const {
print_indent();
va_list args;
va_start(args, format);
vfprintf(fp, format, args);
va_end(args);
fputc('\n', fp);
}