class predek { public: virtual ~predek(){} };
class potomek: public predek { };


void fun(predek& p)
{
    try {
        potomek &pom = dynamic_cast<potomek&>(p);
        // zpracování potomka
    }
    catch(std::bad_cast e) {
        // zpracování předka (nebo jiná obsluha výjimky)
    }
}
