У меня проблема с двумя классами, которые когда-то были хорошо разделены, но теперь они хотят соединиться.
Не вдаваясь в подробности проблемы, вот она:
Раньше у меня был класс Triangle, который содержал 3 вершины пространственного положения.
class Triangle
{
Vertex a,b,c ; // vertices a, b and c
} ;
В программе было много экземпляров Triangle, поэтому каждый сохранил свою собственную копию своих вершин. Такие функции-члены, как getArea ()
, getCentroid ()
и т. Д., Были написаны в классе Triangle
, и поскольку каждый экземпляр Triangle
имел копии Вершины a, b и c, находящие область или центроид, не зависели от других классов. Как и должно быть!
Тогда я захотел перейти к представлению стиля буфера вершинного массива / индекса по другим причинам. Это означает, что все вершины хранятся в одном массиве, расположенном в объекте Scene
, и каждый Треугольник
сохраняет только ССЫЛКИ на вершины в Сцена
, но не копии самих вершин. Сначала я попытался переключиться на указатели:
class Scene
{
std::vector masterVertexList ;
} ;
class Triangle
{
Vertex *a,*b,*c ; // vertices a, b and c are pointers
// into the Scene object's master vertex list
} ;
(Если вам интересно узнать о преимуществах, я сделал это по причинам, главным образом связанным с треугольниками, которые разделяют вершины. Если * a перемещается, то все треугольники, которые используют эту вершину, обновляется автоматически).
Это было бы действительно хорошим решением! Но это не сработало надежно, , потому что std :: vector делает недействительными указатели , а я использовал std :: vector для списка главных вершин в классе Scene
.
Так Мне пришлось использовать целые числа:
class Triangle
{
int a,b,c ; // integer index values
// into the Scene object's master vertex list
} ;
Но теперь у меня есть эта новая проблема связи: чтобы найти свою собственную область или центроид, классу Треугольнику
нужен доступ к сцене класса
, где раньше этого не было , Похоже, что я что-то не так с fsck`ом, но не совсем.
WWYD?