compile time printf -> .NET style format string conversion template.

Neal Alexander wqeqweuqy at hotmail.com
Thu Jan 3 09:05:38 PST 2008


Neal Alexander wrote:
> Alright the basic idea behind this was:
> 
> - During tango porting i want all the stdlib wrapping done in 1 module.
> - Any function that takes a format string cant be wrapped transparently 
> without converting the string or doing something half baked (right?).
> 
> So i wrote this compile-time conversion template:
> 
> http://paste.dprogramming.com/dpjq2ug6 (See the FMT template for 
> discussion purposes. The rest is just conversion/parsing).
> 
> Now for the questions:
> 
> - Why cant i do return x ~ FMT!(s[i .. $]); at line 106? This would 
> avoid having to call skip() to count the fmt string length a 2nd time. 
> The compiler complains s[i .. $] is an invalid argument or somethig.
> 
> - How do i template the print function so that the compiler retains the 
>   immediateness of the format string arg.
> 
> with something like this you'd have to do:
> ---------------------------
> void print(T...)(T t)
> {
>     version (Tango) Stdout.formatln(t);
>     else            writefln(t);
> }
> print(FMT!("whatever %d"), 0);
> 
> 
> where ideally you would want something like this:
> ---------------------------
> void print(T...)(char[] fmt, T t)
> {
>     version (Tango) Stdout.formatln(FMT!(fmt), t);
>     else            writefln(fmt, t);
> }
> print("whatever %d", 0);

figured out one of the questions at least haha:

template print(char[] fmt, T...)
{
     void print(){ Stdout.formatln(FMT!(fmt), T); }
}

print!(...);


More information about the Digitalmars-d-learn mailing list