Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
May 29, 2012 ref fields of .tupleof | ||||
---|---|---|---|---|
| ||||
Hi all! I've spend several hours to solve my problem, and I did it! But don't know why it is worked in this way: I'd like to modify all fields of an object by a specific values (for deserialization). public ref T foo(T)() { T *ret = new T; // DON'T WORK // Looping through fields in this way doesn't modify the object auto fields = ret.tupleof; foreach(ref field; fields) { field = 1; // this doesn't alter 'ret' } // WORK foreach(ref field; ret.tupleof) { field = 1; // this does alter it!!! } return *ret; } (Of course the real code doesn't use the value '1'. It uses values from an ubyte[] with the corresponding types of T's fields) Can somebody explain me why it is work like that? Thanks a lot. |
May 29, 2012 Re: ref fields of .tupleof | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sharp | On Tue, May 29, 2012 at 9:18 PM, Sharp <sharp1113@hotmail.com> wrote:
What does it give if you do:
> foreach(index, unused; fields) {
> fields[index] = 1;
> }
?
|
May 29, 2012 Re: ref fields of .tupleof | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sharp | On 05/29/2012 12:18 PM, Sharp wrote: > public ref T foo(T)() { > T *ret = new T; > // DON'T WORK > // Looping through fields in this way doesn't modify the object > auto fields = ret.tupleof; Looks like fields is a local copy of ret.tupleof so the following modifies just that copy. > foreach(ref field; fields) { > field = 1; // this doesn't alter 'ret' > } Ali |
May 30, 2012 Re: ref fields of .tupleof | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | Thanks a lot Ali, I understand now! Philippe, based on what Ali said, your code will give exactly the same result because it looping through a local copy of ret.tupleof. |
May 30, 2012 Re: ref fields of .tupleof | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sharp | On 2012-05-29 21:18, Sharp wrote: > Hi all! > > I've spend several hours to solve my problem, and I did it! > > But don't know why it is worked in this way: > I'd like to modify all fields of an object by a specific values (for > deserialization). If you want a serialization library: https://github.com/jacob-carlborg/orange -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation