Ich arbeite an einer eingebetteten Plattform mit eingeschränkten Funktionen, so dass Vektoren/STL nicht verfügbar sind.Übergabe eines Arrays von Child-Objekten an eine Funktion, die Parent akzeptiert *
Dies kann ein triviales Problem sein, aber ich habe nicht viel Erfahrung in C++ (nur C und C#, die mich blind für eine offensichtliche C++ - Methode machen kann).
betrachten das folgende Beispiel:
class Parent {
};
class Child : public Parent {
};
void Test(Parent* parents, uint8_t parentCount) {
// Accessing parent[x] is problematic when 'parents' contains a derived type
}
int main() {
// This is OK
Parent parents[3];
Test(parents, 3);
// This causes problems
Child children[3];
Test(children, 3);
return 0;
}
Offensichtlich es problematisch ist, über Eltern in -Test iterieren(), wenn ein Zeiger auf ein Feld von abgeleiteten Klassen zur Verfügung gestellt, da der Speicherplatzbedarfs von Parent wird während der Iteration angenommen.
Die einzige Lösung, die ich sehe, ist ein Array von Zeigern vom Typ Eltern (Parent ** Eltern) passieren, aber das scheint umständlich. Gibt es einen C++ - Mechanismus, den ich nicht kenne, wie das Array als Referenz oder etwas zu übergeben?
"Test" zu einer Vorlagenfunktion machen? Verwenden Sie ein Array von Zeigern (nicht, dass ich es wirklich empfehlen würde, es sei denn, Ihre Klassen sind polymorph). Die Lösung (diese oder andere) hängt sehr vom Anwendungsfall ab. –