使う場面はあるはずなのにstd.traits
などには見つからず、次のようなコードを考えていたのですが、
// 基底クラスを取得することができ、かつ基底クラスの中にObjectが含まれていればclass
template isClass(T)
{
import std.traits : BaseTypeTuple;
import std.meta : staticIndexOf;
static if (__traits(compiles, BaseTypeTuple!T))
enum isClass = staticIndexOf!(Object, BaseTypeTuple!T) != -1;
else
enum isClass = false;
}
これでOKです。
is(C == class)
class
の部分を変えることで、structやinterfaceであるかどうかも調べることができます。
参考: D言語公式ドキュメント