名前を探す

import std.stdio;
import std.string;

template HasMemberFunction(T, char[] name, Signature) {
static if (is(typeof(mixin("&" ~ T.stringof ~ ".init." ~ name)) : Signature)) {
enum : bool { HasMemberFunction = true }
} else {
enum : bool { HasMemberFunction = false }
}
}

class Abc {
void foo() {}
}

int main() {
writefln(toString(HasMemberFunction!(Abc, "foo", void delegate() ))); // true
return 0;
}

クラスやら構造体に指定したシグネチャの何たらというメンバ関数があるかどうかを判定するテンプレート。ただ、Abc.fooをstaticにしてもtypeof(&Abc.init.foo)はvoid delegate()になるから、Signatureがvoid function()の場合trueになってくれない。これを防ぐには上に加えてis(typeof(&T.name) : Signature)を追加すればよいと思う。