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