#pragma once #include #include #include class Base { public: virtual ~Base(); static Base *generate(); static void identify(Base *p); static void identify(Base &p); }; class A : public Base { public: ~A(); }; class B : public Base { public: ~B(); }; class C : public Base { public: ~C(); };