new string mixins -- debug printfs

Bill Baxter dnewsgroup at billbaxter.com
Tue Feb 6 08:45:21 PST 2007


Here's something fun that's now possible:

version(trace) {
     template Trace(char[] msg="") {
         const char[] Trace =
            `writefln("%s(%s): `~msg~`", __FILE__, __LINE__);`;
     }
} else {
     template Trace(char[] str="") {
         const char[] Trace = "";
     }
}

Zero overhead tracing when disabled, file and line number automatically 
supplied when enabled.

But just from trying to do this little thing, it's pretty clear to me 
that "my head asplode" if I have to write too much of this kinda thing 
without a better string literal syntax geared to this.

Something like:
       const char[] Trace =
"""
writefln("%s(%s): @(msg)", __FILE__, __LINE__);
"""
;

Would be much less likely to make me want to scratch my eyes out.


Also a little buglet --
You can call the above like
    mixin(Trace!("a_function"));
or
    mixin(Trace!());

But this doesn't work:
    mixin(Trace);

--bb



More information about the Digitalmars-d mailing list