I have create a article about this topic, but the all lettles pile
together, so I rewrite it again.
I create a polymorphic product creator which allows you to create objects using its name as a template argument, return
a pointer to the object with its base class type.
Here is the implementation:
template
struct AbstractCreator
{
virtual AbstractCreator* operator()(){throw();return 0;}
};
Because we don't want to create a object which is
base typed that unsually is a abstruct class, we have to
prevent the creator from calling the function
AbstractCreator::operator()().But we can not make it a pure
function, the reason for which I will point out in the next article .
template class CreatePolicy = Loki::CreateUsingNew
struct ProductCreator:
public AbstructCreator
{
AbstructCreator* operator()()
{ return CreatePolicy::Create();}
};
The code is so few but not so easy to understand.
Let's have a view about how the creator works:
We assum that class GTank and GBullet are derived
from class GObject,then we can create codes like this:
GObject* pO1 = ProductCreator()();
GObject* pO2 = ProductCreator()();
Why we need a ProductCreator?
There are two reasons.