On 10/30/2011 12:52 AM, J Arrizza wrote:
    When using pattern matching, explicit template arguments are
    necessary. You probably don't want that, the following code does not
    need them:

    void abc(T)(T parm1) if(!isDynamicArray!T)
    {
        writeln("simpleparm: ", parm1);
    }

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

        writeln("array : ", parm1);
    }


The output is:

    simpleparm: 1
    dynamic array : str
    dynamic array : [1, 2]


which sort of makes sense, but doesn't fit my app. It is possible to
treat a string as an array of characters, but in my case I  want to
treat them as a single entity. The whole purpose of the array
specialization is to search/manipulate/compare the individual elements
of an array... except for strings.

Ok, so I modified a little to take care of strings. But I also added
another test for a static array and it's not playing nice anymore.

    void abc(T, U=void) (T parm1)
       {
       writeln("simpleparm: ", parm1);
       }

    void abc(T: string) (T parm1)
       {
       writeln("string : ", parm1);
       }

    void abc(T:U[], U) (T parm1)
       if (isDynamicArray!T)
       {
       writeln("dynamic array : ", parm1);
       }

    void abc(T:U[], U) (T parm1)
       if (!isDynamicArray!T)  //tried isStaticArray as well here
       {
       writeln("static array : ", parm1);
       }

    void main(string[] args)
       {
         writeln("v4");
         abc(1);
         abc("str");
         int[] arr = [1, 2];
         abc(arr);
         int[2] arr2 =[3, 4];
         writeln("arr2 ", __traits(isStaticArray, arr2));
         abc(arr2);
       }


Output is:

    simpleparm: 1
    string : str
    dynamic array : [1, 2]
    arr2 true
    simpleparm: [3, 4]      // should be "static array: [3, 4]"


John




This works:

void abc(T, U=void, size_t N=0) (T parm1) {
    writeln("simpleparm: ", parm1);
}

void abc(T: string) (T parm1) {
    writeln("string : ", parm1);
}

void abc(T:U[], U) (T parm1) if (isDynamicArray!T) {
    writeln("dynamic array : ", parm1);
 }

void abc(T:U[N], U, size_t N) (T parm1) {
    writeln("static array : ", parm1);
}

void main(string[] args) {
    abc(1);
    abc("str");
    int[] arr = [1, 2];
    abc(arr);
    int[2] arr2 =[3, 4];
    abc(arr2);
}

Reply via email to