#include "Base.hpp" #include #include Base *generate(void) { std::srand(time(0)); switch (std::rand() % 3) { case 0: std::cout << "A class generated :D" << std::endl; return new A; case 1: std::cout << "B class generated :D" << std::endl; return new B; case 2: std::cout << "C class generated :D" << std::endl; return new C; }; return new A; } void identify(Base *p) { if (dynamic_cast(p)) { std::cout << "omg it's an A object !" << std::endl; return; } if (dynamic_cast(p)) { std::cout << "omg it's a B object !" << std::endl; return; } if (dynamic_cast(p)) { std::cout << "omg it's a C object !" << std::endl; return; } std::cout << "what is this D:" << std::endl; } void identify(Base &p) { try { (void)dynamic_cast(p); std::cout << "omg it's an A object !" << std::endl; return; } catch (...) {} try { (void)dynamic_cast(p); std::cout << "omg it's an B object !" << std::endl; return; } catch (...) {} try { (void)dynamic_cast(p); std::cout << "omg it's an C object !" << std::endl; return; } catch (...) {} std::cout << "what is this D:" << std::endl; } Base::~Base(void) {}