RosettaCodeData/Task/Reflection-List-methods/D/reflection-list-methods.d

34 lines
638 B
D

struct S {
bool b;
void foo() {}
private void bar() {}
}
class C {
bool b;
void foo() {}
private void bar() {}
}
void printMethods(T)() if (is(T == class) || is(T == struct)) {
import std.stdio;
import std.traits;
writeln("Methods of ", T.stringof, ":");
foreach (m; __traits(allMembers, T)) {
static if (__traits(compiles, (typeof(__traits(getMember, T, m))))) {
alias typeof(__traits(getMember, T, m)) ti;
static if (isFunction!ti) {
writeln(" ", m);
}
}
}
}
void main() {
printMethods!S;
printMethods!C;
}