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