¿Por qué dynamic_cast es malo o no? ¿Debo usar dynamic_cast en este caso?

Algunos dicenthe use of dynamic_cast often means bad design and dynamic_cast can be replaced by virtual functions

¿Por qué es el uso dedynamic_cast considerado mal diseño?

Supongamos que tengo el nombre de la funciónfunc(Animal* animal, int animalType) , la implementación en func es como:

bool func(Animal* animal, int animalType)
{
  ...
  /* Animal is the base class of Bear, Panda, Fish ....
  dynamic_cast animal to real animals(Bear, Panda, Fish...) 
  according to animalType. Do some processing with this specific
  type of animal, using its additional information beyond base 
  class Animal. */
}

¿Es este caso un uso adecuado dedynamic_cast?

Respuestas a la pregunta(3)

Su respuesta a la pregunta