How to copy object of class A to another object of class B?

Chris Williams via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jan 28 15:34:09 PST 2015


On Wednesday, 28 January 2015 at 09:44:29 UTC, zhmt wrote:
> Sometime , I need to copy them:
>
> thrift.Card tc;
> ....
> db.Card dc;
>
> dc.id = tc.id;
> dc.pwd = tc.pwd;
> ...
>
>
> It is boring coding, I want a solution to copy them 
> automatically:
> void copyObj(SRC,DEST)(SRC src,DEST dest)
> {
> 	foreach (i, type; typeof(SRC.tupleof)) {
> 		auto name = SRC.tupleof[i].stringof;
> 		__traits(getMember, dest, name) =  __traits(getMember, src, 
> name);
> 		writeln(name);
> 	}
> }
>
> Unfortunitely, it doesnt work,  how to improve it?

Assuming that the hibernated class isn't auto-generated and you 
can redefine its contents freely, the following style may be an 
alternative that works for you:

struct Foo {
public:
     string a;
     int b;
}

class FooClass {
public:
     union {
         struct {
             string a;
             int b;
         };
         Foo foo;
     }

}

void main() {
     Foo f = Foo("a", 10);
     FooClass c = new FooClass();
     c.foo = f;

     writefln("%s %s", c.a, c.b);
}

Probably the anonymous struct will break the UDAs, but it should 
be worth testing.


More information about the Digitalmars-d-learn mailing list