Thread overview | |||||
---|---|---|---|---|---|
|
March 09, 2017 Get list of public methods of struct | ||||
---|---|---|---|---|
| ||||
Is there any way to get list of public methods of a struct? I looked at both "traits" and "std.traits". getVirtualFunctions and getVirtualMethods are closest I guess, but they don't seem like general purpose due to "Virtual" part. (Wouldn't it work if a method was final?) I saw "FieldNameTuple" in std.traits, but that doesn't seem like a proper solution. I want to use a mixin and foreach to generate a piece of code, that selects which method to call based on given parameter. So, the generated code will be like, if( param == "woof" ) myStruct.woof(); else if( param == "meow" ) myStruct.meow(); woof and meow are the methods of defined struct. |
March 09, 2017 Re: Get list of public methods of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to tcak | On Thursday, 9 March 2017 at 18:32:41 UTC, tcak wrote:
> Is there any way to get list of public methods of a struct?
You can loop through __traits(allMembers, YourStruct) and check protection, type, etc.
__traits(getMember, YourStruct, "some name") gets one method in particular. allMembers returns a list of name strings.
|
March 09, 2017 Re: Get list of public methods of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | On Thursday, March 09, 2017 18:48:22 Adam D. Ruppe via Digitalmars-d-learn wrote:
> On Thursday, 9 March 2017 at 18:32:41 UTC, tcak wrote:
> > Is there any way to get list of public methods of a struct?
>
> You can loop through __traits(allMembers, YourStruct) and check
> protection, type, etc.
>
> __traits(getMember, YourStruct, "some name") gets one method in particular. allMembers returns a list of name strings.
If there's any risk of the same function name being used for both public and private functions, then __traits(getOverloads, ...) is going to need to be used rather than getMember, since getMember only gives you one of the overloads.
- Jonathan M Davis
|
Copyright © 1999-2021 by the D Language Foundation