I would like to replace big switch with something more elegant.
class Base
{
public:
Base(void*data, int size);
virtu
You can use a simple factory method to create objects by required type and constructor parameters as in following example. Don't forget the virtual destructor when using inheritance and virtual functions.
#include
class Base
{
public:
Base(void* data, int size) {};
virtual ~Base() {}
virtual void Something() = 0;
};
class A : public Base
{
public:
A(void* data, int size) : Base(data, size) {}
void Something() override {};
};
class B : public Base
{
public:
B(void* data, int size) : Base(data, size) {}
void Something() override {};
};
Base* MyFactory(char type, void* data, int size)
{
switch (type)
{
case 'a': return new A(data, size);
case 'b': return new B(data, size);
default:
return nullptr;
}
}
int main()
{
std::unique_ptr obj1(MyFactory('a', nullptr, 1));
obj1->Something();
std::unique_ptr obj2(MyFactory('b', nullptr, 1));
obj2->Something();
}