digitalmars.D.learn - "this" member for structs with methods
- simendsjo (8/8) Mar 17 2013 When a struct contains methods, __traits(allMembers reports a
- Maxim Fomin (3/11) Mar 17 2013 This is context pointer. Move outside of function to not to have
- simendsjo (5/17) Mar 17 2013 Should it be included? The documentation is a bit sparse:
- Maxim Fomin (7/25) Mar 17 2013 Yes, it should be documented explicitly. I think it should be
When a struct contains methods, __traits(allMembers reports a member called "this". What is "this"? void main() { struct S { int i; } struct A { int i; void f() {} } pragma(msg, __traits(allMembers, S)); // i pragma(msg, __traits(allMembers, A)); // i, f, this }
Mar 17 2013
On Sunday, 17 March 2013 at 12:16:08 UTC, simendsjo wrote:When a struct contains methods, __traits(allMembers reports a member called "this". What is "this"? void main() { struct S { int i; } struct A { int i; void f() {} } pragma(msg, __traits(allMembers, S)); // i pragma(msg, __traits(allMembers, A)); // i, f, this }This is context pointer. Move outside of function to not to have it.
Mar 17 2013
On Sunday, 17 March 2013 at 13:30:29 UTC, Maxim Fomin wrote:On Sunday, 17 March 2013 at 12:16:08 UTC, simendsjo wrote:Should it be included? The documentation is a bit sparse: http://dlang.org/traits.html#allMembers, but every member listed there are methods in the class or from Object. No hidden this or vtbl shows in the example.When a struct contains methods, __traits(allMembers reports a member called "this". What is "this"? void main() { struct S { int i; } struct A { int i; void f() {} } pragma(msg, __traits(allMembers, S)); // i pragma(msg, __traits(allMembers, A)); // i, f, this }This is context pointer. Move outside of function to not to have it.
Mar 17 2013
On Sunday, 17 March 2013 at 14:27:32 UTC, simendsjo wrote:On Sunday, 17 March 2013 at 13:30:29 UTC, Maxim Fomin wrote:Yes, it should be documented explicitly. I think it should be included because there is actually a special member which has runtime storage and listing "this" does not make much harm, indeed it can be useful (probably some phobos code depend on this). Vtbl can be accessed anyway and class is reference type, so comparing allMembers for structs and classes is not very good.On Sunday, 17 March 2013 at 12:16:08 UTC, simendsjo wrote:Should it be included? The documentation is a bit sparse: http://dlang.org/traits.html#allMembers, but every member listed there are methods in the class or from Object. No hidden this or vtbl shows in the example.When a struct contains methods, __traits(allMembers reports a member called "this". What is "this"? void main() { struct S { int i; } struct A { int i; void f() {} } pragma(msg, __traits(allMembers, S)); // i pragma(msg, __traits(allMembers, A)); // i, f, this }This is context pointer. Move outside of function to not to have it.
Mar 17 2013