View mode: basic / threaded / horizontal-split · Log in · Help
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
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
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
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
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
Top | Discussion index | About this forum | D home