Traits and functions
Bauss via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jan 10 16:03:29 PST 2015
On Saturday, 10 January 2015 at 23:23:52 UTC, Ali Çehreli wrote:
> On 01/10/2015 08:21 AM, Bauss wrote:
>> Is there a way to get all functions within a module using
>> traits? I
>> tried "allMembers" and it seem to work, but I can't use
>> "getFunctionAttributes" with it and if I use "getAttributes"
>> then it
>> won't find any applied attributes.
>>
>> What I do is having a package module with a staic constructor
>> which
>> loops through "allMembers" and then I want to find functions
>> with a
>> specific attribute. All the members are imported using public
>> imports.
>> However it can find the specific functions, but it does not
>> find the
>> attributes.
>
> The following program prints both the function attributes and
> user defined attributes e.g. of foo():
>
> module deneme;
>
> import std.string;
> import std.traits;
>
> struct MyAttr
> {}
>
> @MyAttr
> void foo(int i, double d) pure @nogc nothrow @property
> {}
>
> void main()
> {
> foreach (m; __traits(allMembers, deneme)) {
> pragma(msg, format("module member: %s", m));
>
> static if (mixin ("isCallable!" ~ m)) {
> pragma(msg, format("%s is callable", m));
>
> foreach (funcAttr;
> mixin
> (format("__traits(getFunctionAttributes, %s)", m))) {
> pragma(msg, format(" function attribute: %s",
> funcAttr));
> }
>
> foreach (attr; mixin
> (format("__traits(getAttributes, %s)", m))) {
> static if (is (attr == MyAttr)) {
> pragma(msg, format(" uda: %s",
> attr.stringof));
> }
> }
> }
> }
> }
>
> Ali
Thank you this was exactly what I was looking for!
More information about the Digitalmars-d-learn
mailing list