April 16, 2020 Default implementation of class .opEquals? | ||||
---|---|---|---|---|
| ||||
Just out of curiosity, is there a mixin template or something like that in Phobos for implementing a default .opEquals that does member-wise comparison of a class object? Something like this:
mixin template DefaultOpEquals(T) {
bool opEquals(Object o) {
auto t = cast(T) o;
if (t is null) return false;
foreach (field; __traits(getAllMembers, T)) {
if (this.field != t.field) return false;
}
return true;
}
}
It's annoying to have to write an .opEquals method for every class that basically just does the same thing.
T
--
Verbing weirds language. -- Calvin (& Hobbes)
|
April 16, 2020 Re: Default implementation of class .opEquals? | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On 4/16/20 1:21 PM, H. S. Teoh wrote:
> Just out of curiosity, is there a mixin template or something like that
> in Phobos for implementing a default .opEquals that does member-wise
> comparison of a class object? Something like this:
>
> mixin template DefaultOpEquals(T) {
> bool opEquals(Object o) {
> auto t = cast(T) o;
> if (t is null) return false;
> foreach (field; __traits(getAllMembers, T)) {
> if (this.field != t.field) return false;
> }
> return true;
> }
> }
>
> It's annoying to have to write an .opEquals method for every class that
> basically just does the same thing.
>
This used to work:
this.tupleof == t.tupleof;
But you may have to use std.traits or something to get in all the base class fields.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation