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().