Esatto, magari scrivendolo in maniera un filo più compatta (e evitando di chiamare inutilmente la getComponent due volte):
codice:
if(AI_followTarget *ptr=test->getComponent<AI_followTarget>())
ptr->test();
Tra l'altro, puoi ottimizzare anche la getComponent per evitare di fare due lookup nella mappa inutilmente:
codice:
template <class T> T* getComponent(){
map<type_index, IComponent*>::iterator it=
this->mComponents.find(type_index(typeid(T)));
if (it!=this->mComponents.end())
return static_cast<T*>(it->second);
else
return NULL;
}