У меня есть класс сущностей , базовый класс компонентов и несколько базовых компонентов, полученных . Класс сущности содержит массив указателей базовых компонентов:
class CComponent
{
public:
static unsigned GetType() { return -1; }; //Base identifier
//...
};
class CPoint : CComponent
{
public:
static unsigned GetType() { return 0; }; //Point identifier
}
class CEntity
{
private:
CComponent* aComponents[3];
public:
// ...
//Getter by component ID here!
};
Я хотел бы знать, как я могу отобразить определенный компонент type вместе с его целочисленным идентификатором (для класса компонента CPoint это будет 0), чтобы я мог легко привести это к правильному типу, в моем классе Entity.
Пример : Предположим, я добавил компонент CPoint в массив компонентов сущности (в позиции 0, конечно), и я хочу получить его как CPoint (приведение типов), введя компонент целочисленный идентификатор (в данном случае 0). Я хочу как можно больше избегать огромных случаев «переключения»!
PS: я не хочу использовать множество виртуальных функций в моем базовом классе компонентов, которые соответствуют свойствам в моих производных. (Я не хочу иметь виртуальную функцию SetPos в моем базовом классе компонентов, пока она находится в классе CPoint);
PS # 2: Как прокомментировал etarion, я бы хотел что-то вроде этого:
dynamic_cast<get_type_for(0)*>(obj)
Конечно, это механизм, которого я хочу достичь, я не знаю, возможно ли это или нет.