Я работаю над системой столкновений, для которой мне нужно скопировать коллайдеры сущностей.
Я создаю систему таким образом, что мне не нужно закладывать в камне, как я хочу обрабатывать столкновения (и я, скорее всего, начну использовать AABB, но могу перейти на SAT), но мне нужно будет сделать глубокую копию коллайдеров, какой бы алгоритм я ни использовал. буду использовать.
с одной стороны, глубокое копирование является обязательным требованием, и идиома копировать и подкачивать казалась тем, к чему я должен был прибегнуть.
С другой стороны, мой collidable
не должен быть ничем иным, как интерфейсом, поэтому не должно быть никаких причин не делать его чисто виртуальным.
поэтому я начал с того, что написал следующее:
class collidable
{
public:
virtual collidable& operator= (collidable other)=0;
};
Но я не могу скопировать конструкцию collidable
, потому что она чисто виртуальная.
Обратите внимание, что в одной и той же программе я никогда не буду использовать более одного алгоритма коллизии одновременно, поэтому конфликта методов не будет.
Я действительно не знаю, что я делаю неправильно, если это сторона дизайна или техническая сторона, поэтому я полностью открыт для предложений.
Как я могу заставить класс, производный от collidable, реализовать operator= ?
final
классах иерархии), потому что базовый класс не будет знать, как это сделать. Предоставьте виртуальную функцию, такую какclone()
, в базовом классе, чтобы разрешить создание копий на основе указателя на базу, если вы хотите поддерживать эту функциональность. - person M.M   schedule 16.04.2017