Как проверить, что объект является экземпляром определенного класса в D?
Как проверить, что объект является экземпляром определенного класса в D?
Что-то похожее на ключевое слово Javascript instanceof?
Ответ 1
Используйте cast. Он возвращает нулевую ссылку при попытке применить к подклассу, это не экземпляр (например, С++ dynamic_cast).
auto a = new Base;
auto b = cast(Child) a;
assert(b is null);
a = new Child;
auto c = cast(Child) a;
assert(c !is null);
Ответ 2
typeid может сказать вам, имеет ли экземпляр какой-то точный тип (без учета иерархии наследования):
class A {}
class B : A {}
void main()
{
A a = new B();
// dynamic
assert( typeid(a) == typeid(B) );
// static
assert( typeid(typeof(a)) == typeid(A) );
}