Re: Accessing UDA of private field

2013-01-07 Thread Jacob Carlborg
On 2013-01-06 23:33, Philippe Sigaud wrote: Good thinking. It's not pretty but it works. Thanks. Maybe it can be hidden inside a template? Yeah, I'll see what I can do. -- /Jacob Carlborg

Re: Accessing UDA of private field

2013-01-07 Thread Tove
On Monday, 7 January 2013 at 10:19:45 UTC, Jacob Carlborg wrote: On 2013-01-06 23:33, Philippe Sigaud wrote: Good thinking. It's not pretty but it works. Thanks. Maybe it can be hidden inside a template? Yeah, I'll see what I can do. in which context does private fail? I'm using

Re: Accessing UDA of private field

2013-01-07 Thread Jacob Carlborg
On 2013-01-07 12:59, Tove wrote: in which context does private fail? I'm using something like this: struct my_struct { private: @(1) int t1; @(2) int t2; @(3) int t3; } foreach(m; __traits(allMembers, my_struct)) with(my_struct.init) pragma(msg, __traits(getAttributes,

Re: Accessing UDA of private field

2013-01-07 Thread Tove
On Monday, 7 January 2013 at 13:36:47 UTC, Jacob Carlborg wrote: On 2013-01-07 12:59, Tove wrote: in which context does private fail? I'm using something like this: struct my_struct { private: @(1) int t1; @(2) int t2; @(3) int t3; } foreach(m; __traits(allMembers, my_struct))

Re: Accessing UDA of private field

2013-01-07 Thread David Nadlinger
On Monday, 7 January 2013 at 15:37:48 UTC, Tove wrote: but this seems to work too? import std.traits; struct my_struct { private: @(1) int t1; @(2) int t2; @(3) int t3; } void main() { foreach(m; __traits(allMembers, my_struct)) pragma(msg, __traits(getAttributes,

Accessing UDA of private field

2013-01-06 Thread Jacob Carlborg
I'm trying to adapt my serialization library, Orange, to use the new UDA's. Currently I have one template, NonSerialized, that I want to transfer to an UDA. This template works like: class Foo { int a; int b; mixin NonSerialized!(b); } When serializing Foo b will not be

Re: Accessing UDA of private field

2013-01-06 Thread Philippe Sigaud
The problem is that to access a UDA attached to a field I need to pass a symbol to the __traits(getAttributes). With tupleof I can get the name, type and value of a field but I cannot get a symbol. __traits(getMember) can be used to get the symbol but that will only work for public fields.

Re: Accessing UDA of private field

2013-01-06 Thread d coder
You can use a string mixin: class Foo { int a; @(3) private int b; } void main() { writeln(mixin(__traits(getAttributes, ~ Foo.tupleof[1].stringof ~ ))); // - 3 } Hmm This works only when main is in the same file (and therefor module) as Foo. Regards - Puneet

Re: Accessing UDA of private field

2013-01-06 Thread Philippe Sigaud
On Sun, Jan 6, 2013 at 7:46 PM, d coder dlang.co...@gmail.com wrote: You can use a string mixin: class Foo { int a; @(3) private int b; } void main() { writeln(mixin(__traits(getAttributes, ~ Foo.tupleof[1].stringof ~ ))); // - 3 } Hmm This works only when

Re: Accessing UDA of private field

2013-01-06 Thread Jacob Carlborg
On 2013-01-06 18:29, Philippe Sigaud wrote: You can use a string mixin: class Foo { int a; @(3) private int b; } void main() { writeln(mixin(__traits(getAttributes, ~ Foo.tupleof[1].stringof ~ ))); // - 3 } Good thinking. It's not pretty but it works. Thanks. -- /Jacob