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