Although run-time type information (RTTI) allows for querying polymorphic objects at run-time and safely casting down a class hierarchy, RTTI is not a replacement for the 3ds Max SDK GetInterface mechanism. RTTI improves code robustness, as illustrated by the following example that uses BaseInterface::GetInterface() with dynamic_cast, instead of Animatable::ClassID() with static_cast.
The following is the recommended way to cast an object to a particular interface:
template<typename Interface_T> Interface_T* GetInterface(BaseInterface* base, Interface_ID id) { if (base == NULL) return NULL; return dynamic_cast<Interface_T*>(base->GetInterface(id)); }
Animatable::Class_ID() and static_cast should only be used in the case where you need to retrieve a class that does not have an interface id.
template<typename Interface_T> Interface_T* GetAnimInterface(Animatable* anim, Class_ID cid) { if (anim == NULL) return NULL; if (anim->ClassID() != cid)) return NULL; return static_cast<Interface_T*>(anim); }
In addition, superclass ids (SClass_ID) and class ids (Class_ID) are necessary to create instances of objects based on type information using Interface::CreateInstance().