Thread overview | |||||
---|---|---|---|---|---|
|
January 29, 2015 Overloading equality operator for classes | ||||
---|---|---|---|---|
| ||||
bool opEquals(Object obj, int value) { //do something to compare them return false; } void main(string[] args) { Object obj; if (obj == 12) {} //ERROR function object.Object.opEquals (Object o) is not callable using argument types (int) } According to paragraph (2) - http://dlang.org/operatoroverloading.html#eqcmp), the compiler must try obj.opEquals(12) and 12.opEquals(obj) but this is not happening. Is there any other way to overload the equality operator? (except overriding opEquals in each class intended to be compared with an integer) |
January 29, 2015 Re: Overloading equality operator for classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to rumbu | On Thursday, 29 January 2015 at 17:48:04 UTC, rumbu wrote:
> bool opEquals(Object obj, int value)
> {
> //do something to compare them
> return false;
> }
>
>
> void main(string[] args)
> {
> Object obj;
> if (obj == 12) {}
> //ERROR function object.Object.opEquals (Object o) is not callable using argument types (int)
> }
>
> According to paragraph (2) - http://dlang.org/operatoroverloading.html#eqcmp), the compiler must try obj.opEquals(12) and 12.opEquals(obj) but this is not happening.
>
> Is there any other way to overload the equality operator? (except overriding opEquals in each class intended to be compared with an integer)
UFCS is not used when operators are involved. I think this is intentional.
|
January 29, 2015 Re: Overloading equality operator for classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to rumbu | On 01/29/2015 09:48 AM, rumbu wrote:
> bool opEquals(Object obj, int value)
> {
> //do something to compare them
> return false;
> }
>
>
> void main(string[] args)
> {
> Object obj;
> if (obj == 12) {}
> //ERROR function object.Object.opEquals (Object o) is not callable
> using argument types (int)
> }
>
> According to paragraph (2) -
> http://dlang.org/operatoroverloading.html#eqcmp), the compiler must try
> obj.opEquals(12) and 12.opEquals(obj) but this is not happening.
>
> Is there any other way to overload the equality operator? (except
> overriding opEquals in each class intended to be compared with an integer)
In D, operator overloading is only for user-defined types and through their member functions.
class C
{
int value;
bool opEquals(int value)
{
return value == this.value;
}
}
void main(string[] args)
{
auto c = new C;
if (c == 12) {}
}
Ali
|
Copyright © 1999-2021 by the D Language Foundation