Template function : use the array's one !

TSalm TSalm at free.fr
Tue Feb 17 13:14:05 PST 2009


Hello,

I'm searching to have a generic comparator function.

I done this :

/* ------------ CODE -------------------- */
import tango.io.Stdout;

/***
  * Not for arrays
  ***/
int compare(T)(T o1,T o2)
{
   static if  ( is( T  bar == class )  || is(  T bar == struct )  )
     return o1.opCmp(o2);

   else
     return o2 - o1;
}

/***
  * For arrays
  ***/
int compare(T:T[])(T[] o1,T[] o2)
{
   size_t minLength = ( o1.length<o2.length ? o1.length : o2.length) ;

   for (size_t i=0;i<minLength;i++)
   {
     int result = compare(o1[i],o2[i]);

     if (result != 0)
       return result;
   }

   return o2.length - o1.length ;

}

/***
  * Test
  ***/
void main()
{
   byte[] a = [10,12,13];
   byte[] b = [15,16,17];
   Stdout( compare(a,b) ).newline ;
}
/* ------------ END CODE ---------------- */



But this code return a compilation error :
test_cmp.d(12): Error: cannot implicitly convert expression (o2 - o1) of  
type byte[] to int
test_cmp.d(41): template instance test_cmp.compare!(byte[]) error  
instantiating

It seems it's the first compare function (without array in parameter)  
which is hook.

How can I declare this compare function to use specific code to compare  
arrays ?
Thanks in advance,
TSalm


More information about the Digitalmars-d-learn mailing list