Type "dynamisch" angeben

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

gekkonier

Betreff: Type "dynamisch" angeben

BeitragMi, Feb 06, 2008 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits!

Entschuldigung wegen des seltsamen Threadtitels, ich wüsste nicht wie ichs anders bezeichnen kann.

In folgendem Beispiel habe ich in der Function Create(Param:String) die Zeile wo Local obj:TObj = New TObj steht.
Code: [AUSKLAPPEN]
Type TObj
   Global list:TList
   Field Test:String
   
   Function Create(Param:String)
      Local obj:TObj = New TObj
      obj.Test = Param
      If list = Null list = CreateList()
      list.AddLast(obj)
   End Function
   
   Method Destroy()
      list.Remove(Self)
   End Method
   
   Function Debug()
      For Local obj:TObj = EachIn list
         Print obj.Test
      Next
   End Function

End Type


TObj.Create("hallo")
TObj.Create("welt")

TObj.Debug


Gibt es hier die Möglichkeit statt TObj anzugeben, dass der eigene Typ verwendet werden soll? Also wenn die Type jetzt z.B. TParticle heisst welches ich von TObj ableite die Liste richtig mit TParticle gefüttert wird? Oder muss ich hier überschreiben? Zuerst suchte ich in der Hilfe bei Self, da bin ich allerdings falsch - das bezieht sich ja auf eine Instanz der Type und nicht die Type selbst. Ich vermute dass es anders nicht gehen wird, oder doch?

Vielen Dank im Voraus,
Gekkonier

(Ich hoffe ich habs halbwegs gut umschreiben können, falls nicht bitte fragen!)

D2006

Administrator

BeitragMi, Feb 06, 2008 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Was spricht denn dagegen, die Funktion einfach zu überladen?
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

gekkonier

BeitragMi, Feb 06, 2008 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Prinzipiell nix, ausser Schreibfaulheit. Ich wollte mir einen Basisdatentyp bauen, der die Listenfunktionalität gleich miteingebaut hat. Ist aber kein Problem in diesem Sinne, ich wollte nur wissen ob das mit hauseigenen Mitteln machbar wäre.

In anderen Sprachen hätte ich unter Umständen zu Makros gegriffen, aber auch nur als Notnagel.

Templates gibts in Blitzmax nicht, oder?

gekkonier

BeitragMi, Feb 06, 2008 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, anders umschrieben gehts so wie ichs eigentlich vorhatte:

Code: [AUSKLAPPEN]
Type TObj

   Global list:TList
   
   Method New()
      If list = Null list = New TList
      list.AddLast(Self)
   End Method
   
   Method Destroy()
      list.Remove(Self)
   End Method
   
End Type

Type tObjderivat Extends TObj
   
   Field test:String
   
   Function Debug()
      For Local obj:tObjderivat = EachIn list
         Print obj.test
      Next
   End Function

   
End Type


a:tObjderivat = New tObjderivat
b:tObjderivat = New tObjderivat

a.test = "hallo"
b.test = "welt!"

tObjderivat.Debug()
 

Dreamora

BeitragMi, Feb 06, 2008 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt keine Templates, braucht es aber auch nicht.

Reflection und Factory Pattern sind hier mehr als ausreichend.

Reflection dabei, weil man, wenn man eine beliebige Objektinstanz hat, auf Basis von dieser eine neue erzeugen kann. (siehe Reflection in der Hilfe)

Factory Pattern weil das die Art ist wie man sowas in ner OO Programmiersprache handhabt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

gekkonier

BeitragMi, Feb 06, 2008 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werd mir das näher ansehen. Danke für die Tipps!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group