new string mixins -- debug printfs
Walter Bright
newshound at digitalmars.com
Tue Feb 6 09:09:08 PST 2007
Bill Baxter wrote:
> 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.
Ah, I hadn't realize that this does solve the "point of instantiation"
expansion with __FILE__ and __LINE__ <g>.
>
> 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.
Yes, a better string literal syntax will probably have to be devised.
> Also a little buglet --
> You can call the above like
> mixin(Trace!("a_function"));
> or
> mixin(Trace!());
>
> But this doesn't work:
> mixin(Trace);
It's not a bug, it's as designed.
More information about the Digitalmars-d
mailing list