June 27, 2015 how to skip sub functions in __traits(allMembers) | ||||
---|---|---|---|---|
| ||||
I try to build a symbol table: --- module aveb; import std.stdio; import std.algorithm.searching; import std.ascii; void* [string] sig; void ana(alias mod)() { import std.traits; foreach(memb;__traits(allMembers,mod)) static if (canFind(["package","public"],__traits(getProtection,memb))) static if (isSomeFunction! (__traits(getMember,mod,memb) )) foreach(ov;__traits(getOverloads,mod,memb)) sig[memb] = &__traits(getMember,mod,memb); } void main(string[] args) { //ana!(std.ascii); //ok ana!(std.traits); writeln(sig); } --- >Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb >Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb >etc problem is that the sub functions are not accessible. i'd like to skip them. |
June 27, 2015 Re: how to skip sub functions in __traits(allMembers) | ||||
---|---|---|---|---|
| ||||
Posted in reply to BBaz Attachments: | On Sat, 27 Jun 2015 16:28:40 +0000, BBaz wrote:
> I try to build a symbol table:
>
> ---
> module aveb;
>
> import std.stdio;
> import std.algorithm.searching;
> import std.ascii;
>
> void* [string] sig;
>
> void ana(alias mod)()
> {
> import std.traits; foreach(memb;__traits(allMembers,mod))
> static if
> (canFind(["package","public"],__traits(getProtection,memb)))
> static if (isSomeFunction! (__traits(getMember,mod,memb)
> ))
> foreach(ov;__traits(getOverloads,mod,memb))
> sig[memb] = &__traits(getMember,mod,memb);
> }
>
> void main(string[] args)
> {
> //ana!(std.ascii); //ok ana!(std.traits);
> writeln(sig);
> }
> ---
>
>>Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb etc
>
>
> problem is that the sub functions are not accessible. i'd like to skip them.
wrap your code in another static if:
static if (is(typeof(__traits(getMember, mod, memb)))) { ... }
`is()` gags errors and simply returns `false` for invalid cases.
|
Copyright © 1999-2021 by the D Language Foundation