Предположим, у меня есть базовый класс «Форма» и производные классы «Треугольник», «Квадрат» и «Круг». Член «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, а значением является тип класса.