Sto sviluppando un motore per il porting di codice esistente su una piattaforma diversa. Il codice esistente è stato sviluppato utilizzando un'API di terze parti e il mio motore ridefinirà quelle funzioni API di terze parti in termini della mia nuova piattaforma.Devo restituire un iteratore o un puntatore a un elemento in un contenitore STL?
Le seguenti definizioni provengono dal API:
typedef unsigned long shape_handle;
shape_handle make_new_shape(int type);
ho bisogno di ridefinire make_new_shape
e ho la possibilità di ridefinire shape_handle
.
ho definito tale struttura (semplificata):
struct Shape
{
int type
};
chiamante della make_new_shape
non interessa la struttura sottostante di Shape
, ha bisogno solo un "ansa" ad esso in modo che possa chiamare funzioni come:
void `set_shape_color(myshape, RED);`
dove myshape
è la maniglia per la forma.
Il mio motore gestirà la memoria per gli oggetti Shape
e altri requisiti impongono che il motore memorizzi gli oggetti Shape
in un elenco o in un altro contenitore iterabile.
La mia domanda è, qual è il modo più sicuro per rappresentare questo handle - se lo Shape
stesso verrà memorizzato in un elenco std :: un iteratore, un puntatore, un indice?
perché hai scelto std :: list? –
@jk - Devo essere in grado di aggiungere e rimuovere oggetti 'Shape' dal centro del contenitore. – BeeBand
Decisamente non si vuole ridefinire shape_handle (o make_new_shape). –