template const to compile-time function

Daniel Keep daniel.keep.lists at gmail.com
Tue Sep 4 14:43:35 PDT 2007



Carlos Santander wrote:
> Currently I have this template:
> 
> template seqWrapper (char[] property, alias seq, alias array)
> {
>     const seqWrapper = typeof(array).stringof ~ " " ~ property ~ "()"
>     "{"
>     "if (" ~ array.stringof ~ ".length == 0)"
>     "    " ~ array.stringof ~ " = seqToArray (" ~ seq.stringof ~ ");"
>     "return " ~ array.stringof ~ ";"
>     "}";
> }
> 
> Which is simply used like this:
> 
> mixin (seqWrapper!("users", _list, _users));
> 
> And it works. But I was wondering if it was better to have it as a
> compile-time function, and if so, how it could be changed. I'm using
> D1.0, btw.
> 

string seqWrapper(string property, string seq, string array)
{
    return `typeof(`~array~`) `~property~`()
    {
        if( (`~array~`).length == 0 )
            `~array~` = seqToArray(`~seq~`);
        return `~array~`;
    }`;
}

mixin (seqWrapper("users","_list","_users"));

Six of one, half-dozen of the other, really.  Unless you need to do
stuff involving loops or string processing, templates are quite sufficient.

	-- Daniel


More information about the Digitalmars-d-learn mailing list