virtual+static
Hi,
I am dealing with problem where I need virtual+static function:
enum {A=0,B=1};
Factory.cpp:
------------------
Base * createInstance(int classType,char *name)
{
if(classType == A)
{
return dynamic_cast<Base *> ( A::getInstance(name));
}
else if(classType == B)
{
return dynamic_cast<Base *> (B::getInstance(name));
}
}
base.cpp:
---------------
class Base {
public:
virtual getInstance(string name)=0; //Pure virtual
};
class A:public Base {
public:
static getInstance(string name)
{
if(name already in objList)
return objinlist;
else
return new A();
}
private:
A(){}
List<A> objList;
}
class B:public Base {
public:
static getInstance(string name)
{
if(name already in objList)
return objinlist;
else
return new B();
}
private:
B(){}
List<B> objList;
}
getInstance() is made static in concrete class as we want it to be able
to create instances of that class (hence it has to be static, since we
all this method on class itself)
getInstance() is made pure virtual in base class since I want to
"enforce" the rule that ever yclass deriving from base must implement
this method. If someone doesnt and tries to create a instance, he will
get compile error.
However above code fails to compile:
The function A::getInstance cannot be both virtual and static. This is
a valid case where I need this functionality from design point of view,
but C++ doesnt allow me to do that. Is there any way I can get around
this?
Thanks,
Sunil