Angenommen, eine Domain
, die einen Zeiger auf Shape
speichert. Die genaue Form (Triangle
oder Rectangle
) ist zur Kompilierzeit nicht bekannt und wäre nach dem Lesen der Eingabe klar. Zur Laufzeit muss ich möglicherweise auf Variablen abgeleiteter Strukturen zugreifen, aber dies ist nicht möglich, da der Zeiger auf die Basisstruktur zeigt. Ich fand eine andere Lösung, die "Einschalt-Typ" zu tun, aber es wird abgeraten, wie in der Antwort here hingewiesen. Er sagte auch, dassGute Praxis der Polymorphie
Wenn Sie Polymorphie verwenden, sollten Sie sich nicht kümmern, was hinter einer Basisklasse Verweis/Zeiger ist.
Nun in diesem Fall ist mir egal, so klingt es wie ich sollte nicht Polymorphie verwenden. Ich denke, was ich unten mache, ist ein schlechtes Design, aber was ist dann ein guter Entwurf, um dieses Problem zu lösen?
struct Shape
{
int common_variable;
};
struct Triangle: Shape
{
int triangle_specific_variable;
};
struct Rectangle: Shape
{
int rectangle_specific_variable;
};
struct Domain
{
Shape* shape;
};
int main()
{
Domain domain;
//domain.shape = new Triangle(); // depends on input.
//domain.shape = new Rectangle(); // depends on input.
return 0;
}
ich nicht ganz Ihre Frage oder Ihr Beispiel verstehen.Es scheint, dass ein polymorpher Ansatz hier nützlich sein könnte, aber ich verstehe nicht genug von dem, was Sie tun wollen, um helfen zu können. – callyalater
@callyalater: Ich muss auf abgeleitete Struktur spezifische Variablen zugreifen, aber ich kann nicht, weil der Zeiger auf die Basisstruktur zeigt. – Shibli
Wenn Sie auf Member der 'Derived'-Struktur über' Base'-Pointer zugreifen wollen, können Sie 'dynamic_cast' verwenden, aber Sie müssen die polymorphe Klasse 'Base'-Klasse erstellen, zum Beispiel mit Dummy' virtual void f() { } 'Funktion. – PcAF