User Defined Attributes

Walter Bright newshound2 at digitalmars.com
Tue Nov 6 08:22:19 PST 2012


On 11/6/2012 8:04 AM, Johannes Pfau wrote:> The std.benchmark proposal currently 
requires all benchmark functions to
 > be named "benchmark_name":
 >
 > void benchmark_stdio_write_test() {}
 >
 > with UDA:
 >
 > @benchmark("stdio write test") void benchStdioWrite();
 >
 > Of course you still need that "sheduleBenchmarks" mixin in every module
 > and of course it'd be nice to avoid that. But UDAs are already a big
 > step forward.
 >

Consider that you can use a tuple generated elsewhere for a UDA:

[tp] void foo();

where tp is a tuple. You can even grab the attributes from another symbol, turn 
them into a tuple, and apply the tuple as an attribute to a new symbol. Tuples 
can, of course, be sliced and concatenated.

In other words, by using tuples, you can "encapsulate" what the attributes 
expand to in the same way you can change target code by changing the definition 
of user defined types.


More information about the Digitalmars-d-announce mailing list