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