Преобразование C ++ в производный класс на основе переменной

Предположим, у меня есть базовый класс «Форма» и производные классы «Треугольник», «Квадрат» и «Круг». Член «Shape» - это int «shapeType».

Если shapeType == 1, то это треугольник. Если shapeType == 2, то это квадрат. Если shapeType == 3, то это круг.

Мне интересно знать, что, учитывая, что у меня есть только объект "Shape", который когда-то был производным объектом, если есть способ "динамического" преобразования с понижением в правильный производный класс, используя значение shapeType.

Я знаю, что могу выполнить оператор переключения жесткого кода, примерно такой:

Triangle* t;
Square* s;
Circle* c;

switch (shape->shapeType) {
case 1:
   t = (Triangle*)shape;
case 2: 
   ...
}

Однако вышеупомянутое требует от меня создания указателя на КАЖДУЮ возможность производного класса. Мне интересно, есть ли способ сделать это без жесткого кодирования каждого класса, а вместо этого каким-то образом определить карту типов классов, где ключом является shapeType, а значением является тип класса.

5
задан rkeeler78 24 June 2011 в 17:40
поделиться