digitalmars.D.learn - 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 etcproblem is that the sub functions are not accessible. i'd like to skip them.
Jun 27 2015
On Sat, 27 Jun 2015 16:28:40 +0000, BBaz wrote:I try to build a symbol table: =20 --- module aveb; =20 import std.stdio; import std.algorithm.searching; import std.ascii; =20 void* [string] sig; =20 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] =3D &__traits(getMember,mod,memb); } =20 void main(string[] args) { //ana!(std.ascii); //ok ana!(std.traits); writeln(sig); } --- =20wrap your code in another static if: static if (is(typeof(__traits(getMember, mod, memb)))) { ... } `is()` gags errors and simply returns `false` for invalid cases.=Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb Error: function std.traits.demangleParameterStorageClass is not accessible from module aveb etc=20 =20 problem is that the sub functions are not accessible. i'd like to skip them.
Jun 27 2015