Это не реальный вопрос программирования, мне просто нужен совет о том, как структурировать часть моей программы.
Программа разделена на клиентскую и серверную части. Оба имеют определенный код, включая базовые классы. Вот представление кода, с которым у меня возникли проблемы:
Общие классы:
class BaseEntity
{
public:
virtual void EmitSound(std::string snd) {}
virtual bool IsPlayer() {return false;}
};
class BasePlayer
: public BaseEntity
{
public:
bool IsPlayer() {return true;}
}
Серверные классы:
class Entity
: public BaseEntity
{
public:
void EmitSound(std::string snd)
{
// Serverside implementation
}
}
class Player
: public Entity,BasePlayer
{
public:
void Kick() {}
}
Клиентские классы:
class CEntity
: public BaseEntity
{
public:
void EmitSound(std::string snd)
{
// Clientside implementation
}
};
class CPlayer
: public CEntity,BasePlayer
{
public:
void SetFOV() {}
}
(Методы являются просто примерами)
Класс «Player» должен наследовать все члены как от «Entity», так и от «BasePlayer». Однако это не работает, поскольку оба имеют один и тот же родительский класс (BaseEntity).
Я мог бы, конечно, удалить наследование от «BasePlayer», но тогда я получил бы две функции «IsPlayer», каждая из которых возвращала бы что-то свое.
Я также мог бы переместить всех членов из «BasePlayer» в «Player» и «CPlayer» соответственно, но это привело бы к избыточности, которой я хотел бы избежать, и я больше не мог бы использовать один указатель для объектов любого из них. класс, сохраняя при этом доступ ко всем общим методам.
Мне не нравится ни одно из этих решений, но я не могу придумать ничего другого. Существует ли оптимальное решение этой проблемы?