template specialization for arrays

Jonathan M Davis jmdavisProg at gmx.com
Sat Oct 29 08:41:07 PDT 2011


On Saturday, October 29, 2011 08:24:29 J Arrizza wrote:
> I have a template that I'd like to have a specialization for arrays.
> Initiall I need it to work for byte arrays, but I'd like to make it
> eventually work for all arrays. The page
> http://d-programming-language.org/template says to use
> 
> template TFoo(T : T[]) { ... } // #2
> 
> 
> but when I try it, it doesn't quite work:
> 
> template abc(T)
>   {
>     void abc(T parm1)
>       {
>         writeln("simpleparm: ", parm1);
>       }
>   }
> 
> template abc(T: T[])
>   {
>     void abc(T parm1)
>       {
>         writeln("array : ", parm1);
>       }
>   }
> 
> 
> void main(string[] args)
>   {
>     abc(1);
>     abc("str");
>     int[] arr = [1, 2];
>     abc(arr);
>   }
> 
> 
> The output is:
> 
> simpleparm: 1
> simpleparm: str
> simpleparm: [1, 2]
> 
> 
> Which is not what I want, it needs to be the specialized  template for
> arrays. Note, this doesn't work either:
> 
> template abc(T: T[])
>   {
>     void abc(T[] parm1)
>       {
>         writeln("array : ", parm1);
>       }
>   }

Use std.traits.isDynamicArray in a template constraint. eg.

void abc(T)(T parm1)
    if(isDynamicArray!T)
{
}

- Jonathan M Davis


More information about the Digitalmars-d mailing list