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