Klassen mit Zeiger an Funktion übergeben



  • Hallo,

    ich hab mit dem oben genannten ein kleines oder größeres Problem. Mir selbst bietet sich da auch nach größeren suchen keine wirkliche Lösung.

    Eine Klasse an eine Funktion über einen Zeiger zu übergeben klappt problemlos. Mein Problem ist das ich jetzt verschiedene Klassen hab, wo überhaupt nicht fest steht welche Klassen an die Funktion übernommen werden sollen.

    Ich bastel mehr oder weniger an einem eigenen Spiel, der Spieler darf am anfang entscheiden welche Characktere er in den Kampf mitnimmt. Da jeder dieser Characktere aber ewig viele verschiedenen Funktionen hat die sich auch deutlich voneinander unterscheiden, ist jeder in einer eigenen cpp mit hpp datei untergebracht.

    Es gibt z.B. jetzt die Klasse c_Shorkan und c_Keran aus denen ich eine Instanz erschaffe, neben vielen anderen.

    Die Instanz von c_Shorkan ist player_1, die von c_Keran ist player_2.

    Was ist aber jetzt wenn ich z.B. an eine Funktion c_Shorkan übergebe, in einer anderen Situation aber c_Keran. Die Funktion bleibt vollkommen gleich aber die übergebenen Klassen ändern sich. Das sind später dann 12 Klassen mit denen die Funktion dann arbeiten soll. Es sind aber nicht immer die selben 12 Klassen sondern die verschiedenen Möglichkeiten diese zu kombinieren wachsen da ernorm. Für jede Möglichkeit da ne eigene Funktion schreiben würd also jeglichen Rahmen sprengen.

    In der cpp Datei wo der Kampfablauf stattfindet erschaffe ich die Klassen, wenn ein Charackter drankommt übergebe ich die Klassen an diese Funktion die in einer anderen cpp Datei liegt. Ich kann aber während ich Programmiere nicht wissen welche Klassen übergeben werden. Die Funktion handhabt den Charackter und ermöglicht ihn die anderen Klassen anzugreifen etc.

    Bis jetzt übergebe ich als c_Shorkan *Player_1 was soweit ja gut funktioniert, aber wenn jetzt nicht klar ist das der Player_1 ein c_Shorkan oder ein c_Keran oder eine von anderen 20 Möglichkeiten ist, was mache ich dann? Das hochgerechnet auf 12 Klassen die immer anders sein können, von mal geschätzt 100 verschiedenen Klassen. 20 Spielerklassen, 80 Gegnerklassen jeweils 6 von jeder Seite.

    Die Gegnerklassen sind nicht das Problem die stehen bei einer Karte fest, die Spielerklassen wählt der Spieler aber aus welche er benützen möchte, können also immer anders sein.

    Ich hoffe ich konnte das Problem soweit erklären, Code kann ich auf der Arbeit hier leider nicht posten.

    Falls dafür jemand eine Lösung kennt sage ich schon vorab schon mal Danke, falls noch ausführlichere Beschreibung von Code benötigt ist muss ich das heute spät Abends machen wenn ich zuhause bin.


  • Mod

    Falls schon zur Compilezeit feststeht, welche Version der Funktion wann gebraucht wird: Templates. Perfekte Lösung.

    Falls erst zur Laufzeit feststeht, mit welcher Klasse von Objekt die Funktion aufgerufen wird: Polymorphie. Irgendeine Gemeinsamkeit müssen die Klassen ja haben, wenn du sie so benutzt. Du fasst die Gemeinsamkeiten zu einer (möglicherweise abstrakten) Basisklasse mit (höchst wahrscheinlich virtuellen) Funktionen zusammen. Die Funktion nimmt dann einen Basisklassenzeiger entgegen und entscheidet dynamisch anhand des dahinter stehenden Objekts, welche Funktionen konkret aufgerufen werden.



  • Danke für die schnelle Antwort, hatte ich gestern dann schon gelesen aber während der Arbeit und danach keine Zeit zum Antworten gefunden.

    Ist während der Laufzeit und Gemeinsamkeiten haben sie auch, werde mir das mal anschauen und denke sollte auch klappen. Das was ich gestern damit schon kurz mal getestet hatte, sah recht gut aus.


Log in to reply