TSalm Wrote: > 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)
Change this line to: 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