/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Base.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/09 13:23:31 by adjoly #+# #+# */ /* Updated: 2025/04/09 14:47:54 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "Base.hpp" #include #include void _log(std::string emoji, std::string what, std::string who, std::string str) { #ifdef VERBOSE if (who.empty()) std::cout << "「" << emoji << "」" << what << ": " << str << std::endl; else std::cout << "「" << emoji << "」" << what << "(" << who << "): " << str << std::endl; #else (void)emoji, (void)what, (void)who, (void)str; #endif } Base *generate(void) { std::srand(time(0)); switch (std::rand() % 3) { case 0: std::cout << "just made an A class !" << std::endl; return new A; case 1: std::cout << "just made an B class !" << std::endl; return new B; default: std::cout << "just made an C class !" << std::endl; return new C; }; } void identify(Base *p) { if (dynamic_cast(p)) std::cout << "omg it is an A class !" << std::endl; else if (dynamic_cast(p)) std::cout << "omg it is an B class !" << std::endl; else if (dynamic_cast(p)) std::cout << "omg it is an C class !" << std::endl; else std::cout << "this is none of those class :(" << std::endl; } void identify(Base &p) { try { (void)dynamic_cast(p); std::cout << "omg it is an A class !" << std::endl; return; } catch (...) { } try { (void)dynamic_cast(p); std::cout << "omg it is an B class !" << std::endl; return; } catch (...) { } try { (void)dynamic_cast(p); std::cout << "omg it is an C class !" << std::endl; return; } catch (...) { } std::cout << "this is none of those class :(" << std::endl; } Base::~Base(void) { _log("➖", "Base", "", "destructor called"); }