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
etc
problem 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);
}
---
=20
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.
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.=
Jun 27 2015








ketmar <ketmar ketmar.no-ip.org>