Beliebige Klassen an Funktion übergeben
-
Hi.
Ich habe diverse Frames welche ich in mein Projekt einbauen möchte.
Ich würde gern das laden vereinfach.Momentan sieht es so aus:
TMyFrame1 *Frame = new TMyFrame1(this); Frame->Parent = this; Frame->Left = 50; Frame->Top = 50; Frame->Align = alClient; TMyFrame2 *Frame = new TMyFrame2(this); Frame->Parent = this; Frame->Left = 150; Frame->Top = 150; Frame->Align = alClient; TMyFrame3 *Frame = new TMyFrame3(this); Frame->Parent = this; Frame->Left = 250; Frame->Top = 250; Frame->Align = alClient;und so weiter.
Kann man das eventuell vereinfachen?
Ich dachte da so an eine Funktion der man das Frame übergibt und die Position.InsertFrame(TMyFrame1,50,50);
InsertFrame(TMyFrame2,150,150);
InsertFrame(TMyFrame3,250,250);Ich habe es mal so probiert, da ich nicht weiss wie man direkt eine Klasse übergibt und damit arbeitet.
Wenn ich es so mache, klappt es leider nicht. Es erscheint das Frame nicht.
TMyFrame1 *Frame; InsertFrame(Frame); void __fastcall TMainForm::InsertFrame(TFrame *Frame, int X, int Y) { Frame = new TFrame(this); Frame->Parent = this; Frame->Left = X; Frame->Top = Y; Frame->Align = alClient; }
-
Mit Templates geht das wunderbar

template<typename T> void __fastcall TMainForm::InsertFrame(T* Frame, int X, int Y) { Frame->Parent = this; Frame->Left = X; Frame->Top = Y; Frame->Align = alClient; } int main() { TMyFrame1 *Frame1 = new TMyFrame1(this); InsertFrame<TMyFrame1>(Frame1,50,50); //Weiss jetzt grad nicht mehr ob die Typangabe <TMyFrame1> hier überhaupt nötig ist.. TMyFrame2 *Frame2 = new TMyFrame2(this); InsertFrame<TMyFrame2>(Frame2,150,150); //usw... }
-
-.-
-
Das new bekommt man nicht auch noch in InsertFrame() ?

-
Warum dann nicht gleich so
template<typename T> T*__fastcall TMainForm::InsertFrame(int X, int Y) { T* Frame = new T(this); Frame->Parent = this; Frame->Left = X; Frame->Top = Y; Frame->Align = alClient; return Frame; } int main() { TMyFrame1 *Frame1 = InsertFrame<TMyFrame1>(50,50); TMyFrame2 *Frame2 = InsertFrame<TMyFrame2>(150,150); //usw... }
-
Wau! Grosses Dankeschön an euch beide. Das klappt ja primstens!

Sollte mich wohl doch mal mit Templates beschäftigen.
-
Braunstein schrieb:
Warum dann nicht gleich so
Weil ich nicht gern mit new erstellte Objekte aus ner Funktion zurückgebe, gibt irgendwie ein Puff wer dann aufräumt. Mit smart pointern wärs natürlich eleganter.
-
Das ist zwar prinzipiell richtig, spielt hier aber keine Rolle, da bei dieser Art der Erstellung der Owner (hier TMainForm) für das Wegräumen der Pointer sorgt.
-
Ah ok, kenn mich mit VCL nicht mehr gut aus.