UDA question

Jacob Carlborg doob at me.com
Tue Apr 16 00:16:34 PDT 2013


On 2013-04-16 08:29, Ulf Johansson wrote:
> I have a question regarding using a struct value as user-defined
> attribute. The use-case I am trying to get working is as follows:
>
> struct message {
>      int atom;
> }
>
> ...
>
> class AnActor : ... {
>      @message(id) void myHandler(string arg1, real arg2) {
>      }
>
>      mixin ... // a mixin that builds message dispatch
> }
>
>
> The 'message' attribute defines methods of the class that will
> participate in message dispatch argument matching. This works fine but I
> want to take this one step further. I want to be able to give a message
> and a handler an ID that more strictly directs a message (and gives an
> error if arguments does not match).
>
> The problem I have is quite simple - getting the value of 'atom' out of
> the message attribute. How can I do this? I did not post any of my
> actual code, I hope the above example describes the problem.
>
> Regards,
> Ulf

Use __traits(getAttributes, symbol) to get the attributes out of the 
given symbol. It will return a tuple with the attributes.

I would guess it would look something like this:

message msg = __traits(getAttributes, AnActor.myHandler)[0];
int atom = msg.atom;

See the docs:

http://dlang.org/traits.html#getAttributes
http://dlang.org/attribute.html#uda

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list