Ich entwickle einen Motor für vorhandenen Code auf eine andere Plattform zu portieren. Der vorhandene Code wurde mithilfe einer API von Drittanbietern entwickelt, und meine Engine wird diese API-Funktionen von Drittanbietern im Hinblick auf meine neue Plattform neu definieren.Soll ich einen Iterator oder einen Zeiger auf ein Element in einem STL-Container zurückgeben?
Die folgenden Definitionen stammen aus der API:
typedef unsigned long shape_handle;
shape_handle make_new_shape(int type);
Ich brauche make_new_shape
neu zu definieren, und ich habe die Möglichkeit, shape_handle
neu zu definieren.
Ich habe diese Struktur (vereinfacht) definiert:
struct Shape
{
int type
};
Die Caller von make_new_shape
nicht über die zugrunde liegende Struktur der Shape
schert, es braucht nur ein „Griff“, um es so, dass es Funktionen aufrufen wie:
void `set_shape_color(myshape, RED);`
wo myshape
ist der Griff zur Form.
Meine Engine verwaltet den Speicher für die Shape
Objekte und andere Anforderungen diktieren, dass die Engine Shape
Objekte in einer Liste oder anderen iterierbaren Container speichern soll.
Meine Frage ist, was ist der sicherste Weg, dieses Handle darzustellen - wenn der Shape
selbst in einer std :: list gespeichert wird - ein Iterator, ein Zeiger, ein Index?
Warum haben Sie std :: list gewählt? –
@jk - Ich muss 'Shape' Objekte aus der Mitte des Containers hinzufügen und entfernen können. – BeeBand
Sie möchten definitiv shape_handle (oder make_new_shape) nicht neu definieren. –