Подтвердить что ты не робот

Как проверить, что объект является экземпляром определенного класса в D?

Как проверить, что объект является экземпляром определенного класса в D?

Что-то похожее на ключевое слово Javascript instanceof?

4b9b3361

Ответ 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) );
}