Funcs in Types

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

pixelshooter

Betreff: Funcs in Types

BeitragMi, Okt 25, 2006 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, kann man Functions in nen Type tun, etwa:
Code: [AUSKLAPPEN]
Type testtype
     field textfeld$
     function testprint()
          print textfeld
     end function
end type

damit man zum bespiel machen kann:
Code: [AUSKLAPPEN]
test.testtype = new testtype
test\textfeld = "hello, world"
for druchgang.testtype = each testtype
     durchgang\testprint()
next

oder muss ich dafür auf andere Sprachen wie VB oder C++ ausweichen, die das können?

StepTiger

BeitragMi, Okt 25, 2006 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
glaube das geht nur über umwege

bmax erlaubt sowas glaube
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragMi, Okt 25, 2006 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das kannst du nicht.
Funktionspointer unterstützt nur BlitzMax

Das einzige was du machen kannst, ist eine bestimmte Funktion ausführen und die Type Instanz übergeben.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

E. Urbach

ehemals "Basicprogger"

BeitragMi, Okt 25, 2006 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Das einzige was du machen kannst, ist eine bestimmte Funktion ausführen und die Type Instanz übergeben.

...bzw. du lässt das einen Parser erledigen, der jedesmal beim Aufruf der Funktion die Instanz übergibt und beim Einlesen die Funktionen auslagert. Ein Präprozessor eignet sich dafür hervorragend, wobei ich noch keinen in diesem Forum gesehen habe, der das konnte Smile
Meine Type Engine (die hier noch irgendwo im Codearchiv schlummert) war ein Ansatz dafür. Ich hab die Entwicklung allerdings abgebrochen, weil ich gemerkt habe, dass es sich nicht lohnt, Typestrukturen in Strings zu speichern (saublöde Idee, weiß gar nicht wie ich drauf gekommen bin Rolling Eyes ).

Er würde dann z.B. aus diesem Code...
Code: [AUSKLAPPEN]
Type testtype
     field textfeld$
     function testprint()
          print textfeld
     end function
end type

test.testtype = new testtype
test\textfeld = "hello, world"
for druchgang.testtype = each testtype
     durchgang\testprint()
next

...das machen:
Code: [AUSKLAPPEN]
Type testtype
     field textfeld$
end type

test.testtype = new testtype
test\textfeld = "hello, world"
for druchgang.testtype = each testtype
     testtype_method_testprint(durchgang)
next

function testtype_method_testprint(inst.testtype)
        print inst\textfeld
end function


Prinzipiell ist sowas nicht so schwer zu implementieren. Die Frage ist nur, ob sich der Aufwand lohnen würde.
Funktionspointer kannst du damit allerdings nicht erreichen, da brauchst du schon BMax oder C/C++.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

pixelshooter

BeitragMi, Okt 25, 2006 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
schade, aber trotzdem danke.

und ich denke mal, das geht auch nicht:
Code: [AUSKLAPPEN]
type test
     field feld$ = "immer so"
end type
type speziell.test
     field speziellesfeld
end type
for durchgang.speziell = each speziell
     print durchgang\feld
next

denn feld würde von test an speziell vererbt (so denk ich mir das jedenfalls, aber das geht bestimmt auch nicht; höchstens, wenn ich jede obere instanz mit jeder unteren oder umgekehrt verlinken würde...)
 

Dreamora

BeitragMi, Okt 25, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein auch Type Extension existiert nur in BlitzMax

In Blitz3D / BlitzPlus sind Types nur das was als Struct aus C bekannt ist.
Ein Speicherblock der Zugriff über "Variablen" statt nur über Peek / Poke erlaubt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragMi, Okt 25, 2006 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
type bla
   field FELD$
end type

type speziell
   field da.bla
end type

s.bla=New bla
s\feld$="immer so"
d.speziell=New speziell
d\da=s

for x.speziell=Each speziell
   print x\da\feld$
next


Das geht. Ineinander verschachtelte types, also sowas hier:
Code: [AUSKLAPPEN]
type bla
   field sa.bla
end type

geht auch


nur um eventuelle weitere Fragen zu beseitigen Smile
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

pixelshooter

BeitragDo, Okt 26, 2006 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hab ich ja gemeint mit Links. Ist aber bestimmt nicht so gut für den Speicherplatz(so bei ca. 100.000 types oder so. Weiß nich wie viel platz so ne Linkvariable braucht. [nicht der type, aber bei a.bla = new bla ist ja a n Link auf den type, oder?]Auch 4 Byte wie ne Int oder mehr oder weniger??)
 

Dreamora

BeitragDo, Okt 26, 2006 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Typereferenz braucht 4 Byte, das ist von daher kein Problem.

Allerdings ist das kein Extending. Mit jedem Untertyp wird die Aufrufkette um ein \... länger.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

pixelshooter

BeitragDo, Okt 26, 2006 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
kk, dann is das zwar nicht schön, aber zu verkraften. thx

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group