Предположим, у меня есть класс Entity.
И тогда я п число классов, производный от Entity
например:Проектирование классов для наследования
class Snake : public Entity{...};
class Mouse : public Entity{...};
Теперь у меня есть класс игрока, который является объектом.
Могу ли я создать класс игрока, который наследует от любого типа сущности? например:
class Player : public Entity -->(but instead of entity be any type of entity)
Можно ли это сделать?
Достигается ли это с помощью шаблонов?
Я прочитал, что шаблоны могут быть явно указано в файле CPP т.е.
template class Entity<Snake>;
Я пытаюсь достичь следующего
В моем классе игрока У меня есть функция moveCamera внутри двигаться Теперь только тогда, когда игрок движется, камера движется. Если AI Snake перемещается, камера не должна двигаться.
это моя визуализация функция в классе сущностей, который является виртуальным
void Entity::Render(float interpolation)
{
if(currentAnimation != 0){
float x = this->currLocation.x - (this->currentVelocity.x * (1.0f - interpolation)) - camera->getLocation(L_FACTOR_CURRENT).x;
float y = this->currLocation.y - (this->currentVelocity.y * (1.0f - interpolation)) - camera->getLocation(L_FACTOR_CURRENT).y;
currentAnimation->Render(x,y);
}
}
Это моя функция gameUpdate и в основном перемещает объект в его соответствующих мировых координаты
void Entity::GameUpdate(float gameUpdateDelta)
{
this->Move();
}
Поэтому для моих функция перемещения игрока Я вызову функцию перемещения камеры, а затем вызову функцию перемещения базового класса ... Теперь можно вызвать расширенный класс функции перемещения класса базы.
My Move functi on является виртуальным, и поэтому змея и мышь могут двигаться по-другому.
Зачем вам это нужно? Похоже, вам нужна композиция, а не наследование? Взгляните на [Decorator pattern] (http://en.wikipedia.org/wiki/Decorator_pattern) - может помочь –
, как бы я сделал то же самое с помощью декоратора? –
Возможно использование шаблонов, но в этом случае то, что вы ищете, - это концепция, которая не является частью C++. Вместо этого Entity становится ad-hoc набором функций-членов, которые вы вызываете внутри шаблона, - он не кодируется на языке. Но состав * является лучшим решением в большинстве случаев. –