Debug output functions
Wouter Verhelst
wouter at grep.be
Mon Jul 2 20:12:39 PDT 2012
So, I wanted to create a number of functions that would call write(),
writef(), writefln(), or writeln() with whatever arguments they were
given, but only if the user had used a 'enable debugging' command-line
option (or some such).
What I first did was this:
module debugout;
int debuglevel;
void set_level(int level) {
debuglevel = level;
}
auto tdebug(func)(int level, ...) {
va_list va;
va_start(va, level);
if(debuglevel <= level) {
return func(va);
}
va_end(va);
}
alias tdebug!(write) wdebug;
alias tdebug!(writef) wdebugf;
(... and so on...)
but that didn't work:
debugout.d(20): Error: template instance tdebug!(write) tdebug!(write) does not match template declaration tdebug(func)
I had a short look at http://dlang.org/variadic-function-templates.html
which would seem to be a somewhat better way of implementing this, but I
can't figure out how exactly I should go forward, then.
I do believe that something like the following would do what I want:
auto wdebug(level, ...) {
va_list va;
va_start(va, level);
writefx(stdout, ???, va);
va_end(va);
}
except the va_list stuff doesn't seem to be necessary, I don't know what
to put in place of the "???", and I'd have to write this four times
rather than being able to template it four times.
How should I do this instead?
--
The volume of a pizza of thickness a and radius z can be described by
the following formula:
pi zz a
More information about the Digitalmars-d-learn
mailing list