Ho un problema con 2 classi che una volta erano ben separate, ma ora vogliono accoppiarsi.Quando le classi vogliono unire
Senza entrare troppo nello specifico del problema, qui è:
Ho usato per avere un triangolo di classe che conteneva 3 vertici spazio posizioni.
C'erano molte istanze Triangolo nel programma, quindi ciascuna aveva mantenuto la propria copia dei loro vertici. Funzioni membro come getArea()
, getCentroid()
ecc. Sono state scritte nella classe Triangle
e poiché ciascuna istanza di Triangle
ha copie dei vertici a, bec, la ricerca dell'area o del centroide non ha avuto alcuna dipendenza da altre classi. Come dovrebbe essere!
Quindi volevo passare a una rappresentazione in stile vertex-array/index buffer, per altri motivi. Ciò significa che tutti i vertici sono memorizzati in un singolo array situato in un oggetto Scene
e che ogni Triangle
conserva solo REFERENCES sui vertici in Scene
, non copie dei vertici stessi. In un primo momento, ho provato il passaggio per i puntatori:.
class Scene
{
std::vector<Vertex> masterVertexList ;
} ;
class Triangle
{
Vertex *a,*b,*c ; // vertices a, b and c are pointers
// into the Scene object's master vertex list
} ;
(Nel caso vi stiate chiedendo circa i benefici, l'ho fatto per motivi per lo più a che fare con i triangoli che condividono i vertici Se * poi un muove tutti i triangoli che usa quel vertice sono aggiornati automaticamente).
Questa sarebbe stata una soluzione davvero buona! Ma non ha funzionato in modo affidabile, because std::vector invalidates pointers, e stavo usando un vettore std :: per l'elenco dei vertici principali nella classe Scene
.
Così ho dovuto usare interi:
class Triangle
{
int a,b,c ; // integer index values
// into the Scene object's master vertex list
} ;
Ma ora ho questo nuovo problema di accoppiamento: per trovare la propria area o baricentro, classe di accesso Triangle
bisogno di class Scene
dove prima non ha fatto. Sembra che abbia fatto qualcosa di fsck, ma non proprio.
WWYD?
Come è agnostico questo linguaggio? –
modificato in C++. – bobobobo
Queste classi mi ricordano George Costanza: "Ho accoppiato! Ho accoppiato!" –