need help about get all public static function name
Stanislav Blinov
stanislav.blinov at gmail.com
Mon Oct 22 11:18:20 UTC 2018
On Monday, 22 October 2018 at 10:49:10 UTC, test wrote:
> test1.d
> =====================
> alias Fn1 = void function();
> struct XX {
> alias Fn = Fn1;
> // ...
> }
'Fn' is not a static function, it's a type. I.e. you can declare
a function pointer with it:
Fn func;
> test2.d
> =====================
> import test1;
> void GetPub(BaseType)(){
> // ...
> }
My code works fine with your struct XX, with dmd 2.082.
std.traits.hasMember expects an aggregate *type*, but you're
trying to pass as instance.
A revised GetPub:
void GetPub(BaseType)(){
static foreach (name; __traits(allMembers, BaseType))
static if( name[0] !is '_' && is(typeof(__traits(getMember,
BaseType, name))) && __traits(getProtection, __traits(getMember,
BaseType, name)) == "public" ) {
//static assert( hasMember!(BaseType.init, name));
static assert(hasMember!(BaseType, name));
static if( __traits(isStaticFunction,
__traits(getMember, BaseType, name)) ) {
pragma(msg, BaseType.stringof ~ "." ~
name);
}
}
}
note the added check that the member is not a type:
is(typeof(__traits(getMember, BaseType, name))).
You'll still need to iterate overloads if you want to get all
static functions.
More information about the Digitalmars-d-learn
mailing list