www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - offsetof + foreach

reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
I have a struct buffer, and I want to print out its members' offsetof.

This:

foreach(i,_t; buffer.tupleof) {
             writefln("%s : %s", _t.stringof, _t.offsetof);
         }

complains

Error: undefined identifier 'offsetof'

what should I be doing?
Sep 07 2012
parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 09/07/2012 10:31 AM, Ellery Newcomer wrote:
 I have a struct buffer, and I want to print out its members' offsetof.

 This:

 foreach(i,_t; buffer.tupleof) {
              writefln("%s : %s", _t.stringof, _t.offsetof);
          }

 complains

 Error: undefined identifier 'offsetof'

 what should I be doing?

nevermind, I remember tupleof + foreach has always been broken writefln("%s : %s", buffer.tupleof[i].stringof, buffer.tupleof[i].offsetof);
Sep 07 2012
parent "Kenji Hara" <k.hara.pg gmail.com> writes:
On Friday, 7 September 2012 at 17:32:43 UTC, Ellery Newcomer 
wrote:
 On 09/07/2012 10:31 AM, Ellery Newcomer wrote:
 I have a struct buffer, and I want to print out its members' 
 offsetof.

 This:

 foreach(i,_t; buffer.tupleof) {
             writefln("%s : %s", _t.stringof, _t.offsetof);
         }

 complains

 Error: undefined identifier 'offsetof'

 what should I be doing?

nevermind, I remember tupleof + foreach has always been broken writefln("%s : %s", buffer.tupleof[i].stringof, buffer.tupleof[i].offsetof);

I think this is expected behavior. In foreach body, _t is a copy of field value, and it's not buffer's field itself. Your code is equivalent with: foreach(i,_; buffer.tupleof) { auto _t = buffer.tupleof[i]; // _t is a normal variable writefln("%s : %s", _t.stringof, _t.offsetof); } Then you cannot get offsetof property from _t; Regards. Kenji Hara
Sep 08 2012