ultimatepp/tutorial/Ntl11/Ntl11.cpp
cxl 0e04c59abc cpp11 branch - committing the merge (rest of it)
git-svn-id: svn://ultimatepp.org/upp/trunk@7048 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2014-03-16 16:35:29 +00:00

60 lines
872 B
C++

#include <Core/Core.h>
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<Base>& t)
{
t.Create<Derived1>();
}
void MakeDerived2(One<Base>& t)
{
t.Create<Derived2>();
}
VectorMap<int, void (*)(One<Base>&)> factories;
INITBLOCK {
factories.Add(0, MakeDerived1);
factories.Add(1, MakeDerived2);
};
void Create(One<Base>& t, int what)
{
(*factories.Get(what))(t);
}
CONSOLE_APP_MAIN
{
One<Base> s;
DUMP((bool)s);
s.Create<Derived1>();
DUMP((bool)s);
DUMP(s->Get());
s.Create<Derived2>();
DUMP((bool)s);
DUMP(s->Get());
s.Clear();
DUMP((bool)s);
Create(s, 0);
DUMP(s->Get());
}