#include using namespace Upp; struct Base { virtual String Get() = 0; virtual ~Base() {} }; struct Derived1 : Base { virtual String Get() { return "Derived1"; } }; struct Derived2 : Base { virtual String Get() { return "Derived2"; } }; void MakeDerived1(One& t) { t.Create(); } void MakeDerived2(One& t) { t.Create(); } VectorMap&)> factories; INITBLOCK { factories.Add(0, MakeDerived1); factories.Add(1, MakeDerived2); }; void Create(One& t, int what) { (*factories.Get(what))(t); } CONSOLE_APP_MAIN { One s; DUMP((bool)s); s.Create(); DUMP((bool)s); DUMP(s->Get()); s.Create(); DUMP((bool)s); DUMP(s->Get()); s.Clear(); DUMP((bool)s); Create(s, 0); DUMP(s->Get()); }