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

zhmt via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jan 28 23:19:24 PST 2015


On Wednesday, 28 January 2015 at 23:34:10 UTC, Chris Williams 
wrote:
> 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.

The hibernated class is not auto-generated yet. I think this is a 
good idea too.



More information about the Digitalmars-d-learn mailing list