void myFunc(T: !=int)(T value)
tsalm
tsalm at free.fr
Fri Aug 22 07:52:04 PDT 2008
Le Fri, 22 Aug 2008 15:23:11 +0200, Steven Schveighoffer
<schveiguy at yahoo.com> a écrit:
> "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
>
>
I don't explain myself clearly ...
This problem concern a "bug" on tango :
http://www.dsource.org/projects/tango/ticket/1259#preview
Here's a better example :
/***************************************/
struct MyStruct
{
int a;
// Must be use to sort this struct on an array
// but the compilation send a conflict with "opCmp(T)(T val)"
int opCmp(MyStruct m)
{
return a - m.a;
}
// I need this to compare with other objects
int opCmp(T)(T val)
{ /* ... */}
}
void main()
{
MyStruct a,b,c,d;
a.a = 5;
b.a = 1;
c.a = 10;
d.a = -1;
MyStruct[] array = [a,b,c,d];
array.sort;
foreach(el;array)
{
Stdout(el.a).newline;
}
}
/***************************************/
More information about the Digitalmars-d-learn
mailing list