Proposal: user defined attributes

Tove tove at fransson.se
Sun Mar 25 17:30:19 PDT 2012


On Sunday, 25 March 2012 at 15:24:18 UTC, Jacob Carlborg wrote:
> On 2012-03-22 02:23, Tove wrote:
>
>> mixin(attr(q{struct Foo
>> {
>> @NonSerialized int x;
>> @NonSerialized int y;
>> int z;
>> }}));
>>
>> void main()
>> {
>> auto m = [ __traits(allMembers, Foo) ];
>> writeln("Normal members of Foo:", m);
>>
>> auto n = [ __traits(allMembers, Foo_Serializable) ];
>> writeln("Serializable members of Foo:", n);
>> }
>>
>
> Just really ugly and it creates a new type, completely 
> unnecessary if D supported user defined attributes.

Well... "eye of the beholder"... I think that's exactly the 
beautiful part, because:
1) The original type is 100% unaltered...
2) Easy for the compiler to optimize the new type away as it's 
never instantiated, nor used beyond ctfe reflection i.e. 0 
runtime overhead.
3) It trivially allows using the built-in traits system everyone 
already is familiar with.

but I wonder if one can do better with a mixin template, 
accessing it's "parent"...



More information about the Digitalmars-d mailing list