The easiest way is to simply use cast:
Exception e = ...;
if(auto b = cast(BaseHTTPException) e) {
// use b of that type
} else if(auto s = cast(SpecializedHTTPException) e) {
// use s, e is of this type
}
and so on.
On Friday, 14 February 2014 at 03:37:16 UTC, Uranuz wrote:
Is it possible to check somehow at runtime that one object
inherits from another object somehow using .classinfo property.
classinfo also includes members for base class and a list of
interfaces (in fact, internally, this is how the dynamic cast
operator is implemented - it walks these chains and keeps track
of the appropriate offset to convert the object).
But the cast will probably do what you need in a simpler way.
Also btw, the .classinfo and/or the typeid(obj) expressions will
go straight to the most derived type. If you use that, you should
be able to go into your associative array of handlers directly.
But that won't call it for base classes so pros and cons.