Я пишу новый контейнер как расширение общих контейнеров STL, хранящихся в AContainer (абстрактный класс).Для этого контейнера я хочу добавить новые функции в зависимости от хранимых объектов (геометрических объектов, таких как точки, линии, ...) ...
Но проблема немного сложнее.Например ... Существует несколько типов точек (2D, 3D ...), большинство свойств одинаковы ... Какая модель данных больше подходит:
1) Универсальный контейнер
Вывод нового класса Container из абстрактного класса AContainer, общего для каждого типа объектов.
AContainer -> Container
Выполнение частичной специализации для других геомерных объектов
Container <Point>
Container <Edge>
Container <Polygons>
и реализация их поведения внутри этих объектов.классы.
Но эта модель вызывает проблемы с описанием одного и того же поведения точек разных типов.Я должен специализировать Контейнер для Point2D, point3D
Container <Point2D>
Container <Point3D>
и в обеих специализациях написать их поведение, поэтому будет скопировано много кода.
В C ++, по моему мнению, невозможно выполнить частичную специализацию для класса и всех производных классов.
2) Специальный контейнер для каждого типа объекта
Производнаяновые классы для каждого типа объекта
AContainer ->ContainerPoints
->ContsinerEdges
->ContainerFaces
Существует несколько различных контейнеров, которые могут быть специализированными.Проблем с описанием поведения точек не возникнет, их общие свойства будут определены внутри
ContainerPoints
без необходимости какой-либо специализации ...
Боюсь слишком большой фрагментациикода (слишком много похожих классов) ... И, например, std :: vector универсален для каждого хранимого типа ...
Лучше ли для каждого геометрического типа создать новый класс или сделатьчастичная специализация?
Спасибо за помощь ...