Traits and functions
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.
Re: Traits and functions
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
Re: Traits and functions
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!