find difference between two struct instances.
Nicholas Wilson via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jul 21 18:04:48 PDT 2017
On Friday, 21 July 2017 at 23:38:51 UTC, FoxyBrown wrote:
> On Friday, 21 July 2017 at 22:35:20 UTC, Era Scarecrow wrote:
>> On Friday, 21 July 2017 at 21:03:22 UTC, FoxyBrown wrote:
>>> Is there a way to easily find the differences between to
>>> struct instances? I would like to report only the differences
>>>
>>> e.g.,
>>>
>>> writeln(s1 - s2);
>>>
>>> prints only what is different between s1 and s2.
>>
>
> No, it isn't. It is a concept, wasn't mean to be taken as
> literal D code.
>
>> This is entirely dependent on the structs in question, you
>> can't just subtract any struct from another struct unless it
>> knows how to do it.
>>
>> Depends on what the structures hold. You'll probably have to
>> either make an opSub, a function to call opBinary!"-", or do
>> opCmp which returns which is higher/lower (and may be as
>> simple as subtraction).
>
> Why do I want to go through all that trouble? A simple binary
> compare should suffice.
use opCmp in conjunction with __traits(allMembers,T)
struct Example
{
int a,b,c;
string d,e,f;
}
void difference(alias func, T)(T t1, T t2) if(__traits(compiles,
func(t1,t2)))
{
foreach(U; __traits(allMembers,T)
{
if (mixin("t1." ~ U.stringof~ ".opCmp(t2." ~ U.stringof
~")")
func(t1,t2);
}
}
auto a = Example(1,2,3,"foo","bar",baz");
auto a = Example(1,2,42,"foo","bar",quux");
difference!(writeln)(a,b); // hopefully prints 343\nbazquux
Not tested but should give you an idea to adapt as needed.
More information about the Digitalmars-d-learn
mailing list