void myFunc(T: !=int)(T value)

Steven Schveighoffer schveiguy at yahoo.com
Fri Aug 22 06:23:11 PDT 2008


"tsalm" wrote
> Le Fri, 22 Aug 2008 14:33:23 +0200, Jarrett Billingsley 
> <kb3ctd2 at yahoo.com> a écrit:
>
>> -------------------------------------------
>> "tsalm" <tsalm at free.fr> wrote in message
>> news:op.ugacfwj7010shu at papillon.lan...
>> Hello,
>>
>> I want to do something like this :
>>
>> class MyClass
>> {
>>    void myFunc(int intValue)
>>    {
>>      /* Do something with this int */
>>    }
>>
>>    void myFunc(T: !=int)(T valueNotInt)
>>    {
>>      /* valueNotInt can not be an int */
>>    }
>> }
>>
>> Thanks in advance,
>> TSalm
>> -------------------------------------------
>>
>> void myFunc(T: int)(int intValue) {}
>> void myFunc(T)(T notIntValue) {}
>>
>> :)
>>
>
> In fact, the exact operator is :
>   int opCmp(MyStruct m)
>
> It must be use, when this struct is in an array, to sort this array
> And strangly, the method
>    int opCmp(T:MyStruct)(MyStruct m)
> is not take by ".sort"
> :(

Ah, your problem is that template methods cannot be virtual.  .sort is 
trying to use the virtual method int opCmp(Object) in Object.

Overload with Object as the argument for the non-int function:

int opCmp(Object o); // this will be used in .sort
int opCmp(int i);

-Steve 




More information about the Digitalmars-d-learn mailing list