Verweis auf Klasse?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Fetze

Betreff: Verweis auf Klasse?

BeitragMo, Aug 08, 2005 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Hat jemand von euch ne Ahnung, ob und wenn ja, wie ich auf eine Klasse als ganzes verweisen kann? Vielleicht irgendeine Pointer-Spielerei? Das Problem ist folgendes: Ich habe in mehreren Container-Types dieselben globalen Variablen. Etwa so:

Code: [AUSKLAPPEN]

Type Blib
  Global sNameList:String[]
End Type


Type Plup
  Global sNameList:String[]
End Type


sNameList ist hier nur ein Beispiel. Ich würde nun gerne in einer Variable speichern, aus welchem der beiden Container-Types die globalen ausgelesen werden sollen, etwa so:

Code: [AUSKLAPPEN]

MyType:Type = Blib

MyType.sNameList[]... usw.


Das funktioniert aber nicht, wie eigentlich auc hvorherzusehen war. Lasse ich ":Type" weg, beschwert sich der COmpiler, er könne "Type" nicht in "Int" umwandeln. Schreibe ich es hin, beschwert sich wiederum der Teil des Compilers, der Keywords erkennt: Er erwartet hinter den Keyword "Type" jedenfalls kein "=".
Natürlich habe ich mir bereits überlegt, einfach beide Klassen von einer Oberklasse erben zu lassen. Aber leider müsste ich dann die benötigten Globalen bereits in der Oberklasse definieren, was zur Folge hat, dass der Variableninhalt in beiden Tochterklassen gleich ist, da Bmax sie nun gleichsetzt.
Ich könnte natürlich auch meine Arrays als Felder einer Klasse definieren, von der ich so viele Objekte erstelle wie ich unterschiedliche Container brauche. Natürlich ginge das. Das ,was mich daran wiederum stört, ist, dass es unschön programmiert wäre. Kann man das nicht irgendwie anders realisieren?

Jolinah

BeitragMo, Aug 08, 2005 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich könnte natürlich auch meine Arrays als Felder einer Klasse definieren, von der ich so viele Objekte erstelle wie ich unterschiedliche Container brauche. Natürlich ginge das. Das ,was mich daran wiederum stört, ist, dass es unschön programmiert wäre. Kann man das nicht irgendwie anders realisieren?


Ich glaub das geht nicht anders, da ein Type selber kein Objekt ist. Da lässt sich auch nichts mit Pointern machen.

Code: [AUSKLAPPEN]

Type globals
  Field sNameList:String[]

  Function LoadFromIni:globals(file:String)
    ...
  End Function
End Type

Local blib:globals = globals.LoadFromIni("blib.ini")
Local plup:globals = globals.LoadFromIni("plup.ini")

Local aktuell:globals = blib

Print aktuell.sNameList[0]


Also ich finde das kommt etwa aufs selbe, wieso sollte das unschön sein? Wink

Fetze

BeitragMo, Aug 08, 2005 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Unschön, weil ich es bisher so gehandhabt habe, dass jeder geladene Objekttyp jeweils in Form von globalen in der entsprechenden "Ingame"-Klasse gespeichert wird. Jetzt habe ich aber eine Ingame-objek, des entweder zu Objekttyp 1, zu Objekttyp 2 oder zu Objekttyp 3 verweisen kann. Einfach unschön, aufgrund der logischen zugehörigkeit und meienr bisherigen Codestruktur.

Aber das hat sich erledigt, ich hab alle 3 Objektverweise eliminiert, indem ich die drei Objekttypen zu einem zusammengefasst hab. Ist im Endeffekt sogar besser.
 

Dreamora

BeitragMo, Aug 08, 2005 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht ist das eine Möglichkeit für dich?
Bin mir net sicher ob ich deine Zielsetzung wirklich richtig verstanden habe.


Code: [AUSKLAPPEN]

Type Base
  'globals hier für alle types

end type

type ext1 extends Base
  ' kann auch auf die Base globals zugreifen als obs eigene wären
 
  ' eigene globals
end type

type ext2 extends base
  ' kann auch auf die Base globals zugreifen als obs eigene wären
  ' kann jedoch nicht auf ext1 globals zugreifen oder umgekehrt

end type
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Fetze

BeitragMo, Aug 08, 2005 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, naja, theoretisch schon, ja. Aber das ganze hat sich ohnehin erledigt, mittlerweile

TheShadow

Moderator

BeitragMo, Aug 08, 2005 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
etwa so?


Type test
Global array[]
EndType

For i=1 to test.array.length
Print test.array[i-1]
Next
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Fetze

BeitragDi, Aug 09, 2005 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Nope, ic hwollte ja nicht test, sondern eine klasse, die in eienr Variable angegeben wird.. Aber wie gesagt: Es hat sich erledigt *g*

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group