Function in Liste (tList) Speichern
Übersicht

![]() |
BobBetreff: Function in Liste (tList) Speichern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen.
Ist es möglich eine Function in einer Liste zu speichern? Code: [AUSKLAPPEN] Function Test() Print "dies ist ein test" End Function Local vArFunc() = Test 'funktioniert varfunc Local L:TList = New TList l.AddLast Test 'funktioniert nicht ' Compile Error: Unable to convert from 'Int()' to 'Object' |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht geht es mit ein bisschen Assembler-Magie... | ||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub es sollte mit "l.AddLast Object( Test )" gehen...
Edit : Sry geht ja um Functions-Zeiger... Habs mal mit Function Test:Object() probiert aber geht auch nicht... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Moep |
![]() Antworten mit Zitat ![]() |
---|---|---|
Speicher die Funktion in einer Klasse, ist zwar minimal umständlicher, wäre aber eine Lösung des Problem.
mfg |
||
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42 Achtung: Suchtgefahr! moep123.ohost.de |
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Speicher die Funktion in einer Klasse, ist zwar minimal umständlicher, wäre aber eine Lösung des Problem.
Werd ich mal versuchen. Danke. Weiterhin hab ich dann das noch (nachträglich) gefunden. https://www.blitzforum.de/foru...cf31d8ab0a |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Interessantes Problem und gute Idee von Moep, übrigens gar nicht so kompliziert, hab's 'mal ausprobiert.
BlitzMax: [AUSKLAPPEN] Type TFuncClass Das sollte genau das sein, was Bob sucht. Edit: Hab' erst danach Bobs Link angeschaut, das sind natürlich auch gute Alternativen... |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Type TFunc Ich glaub das passt eher als es über Type Vererbung zu machen... mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und dazu noch ein System von mir, vor etwas längerer Zeit geschrieben. Der folgende Quelltext kann simpel per Import eingebunden werden. Er benutzt TMaps (BRL.Map), um die Daten zu speichern. Ich habe hier schonmal ein paar Worte zum Code verloren und möchte jetzt noch etwas hinzufügen: Es ist nicht unbedingt eine optimierte Lösung, aber sie funktioniert. Die Abfrage erfolgt durch Methoden des Types "TFPtrWrapper". Da BMax in der Hinsicht Parametertypen, -anzahl und Rückgabewerten leider etwas eingeschränkt ist (und ich, als ich den Code geschrieben habe, noch nicht so vertraut mit Funktionspointern war), muss für jeden Typ Funktion, die gespeichert werden soll, ein Type angelegt werden und entsprechend gecastet werden. Ich hoffe trotzdem, dass der Code hilfreich ist.
BlitzMax: [AUSKLAPPEN] Import BRL.Blitz |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich danke euch für die Denkanstösse.
@ToeB Das sieht gut aus. So in etwa hab ich es mir vorgestellt. Super schik wäre noch wen man den Name der Function als String übergeben könnte. Also Anstelle von Code: [AUSKLAPPEN] Local Test1:TFunc = TFunc.Create( func1 )
so Code: [AUSKLAPPEN] Local myVar:string ="Click_Button(1)" Local Test1:TFunc = TFunc.Create( myVar ) So könnte man schon mal alle nötigen Functionsaufrufe während der Laufzeit erzeugen. Code: [AUSKLAPPEN] Function Click_Button(BT:int) Print "Click_Button " + BT End Function Anschliesend könnten dann diese Functionsgerüste in eine Datei geschrieben weden. ich denke da z.B. an einen Gui Editor. |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ginge (wenn auch eingeschränkt) über Reflection. Damit kannst du über die Namen von Objekten auf Types, Methoden und Felder zugreifen. Die Standardvariante unterstützt keine Funktionen, allerdings gibt's im englischen Forum eine Modifikation (Pointer und Funktionen werden dann unterstützt), mit der das geht. Einfach mal suchen. Zur Benutzung von BRL.Reflection kannst du in die Dokumentation schauen, mit der kann man das gut lernen.
Der einzige Nachteil von Reflection ist, dass du alles in Types packen musst, da für die anderen Funktionen im Releasemodus keine Metainformationen gespeichert werden (die man bräuchte, damit Reflection funktioniert). Und Features, die nur im Debugmodus arbeiten, braucht keiner. ![]() |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ n-Halbleiter
Danke für den Hinweis. Bin tatsächlich überrascht das dies, wen auch eingeschränkt, möglich ist. Ich denke ich werd es dennoch nicht versuchen wen es keine einfacherer Möglichkeit gibt. Ansonsten müsste ich mich, mal wieder, noch tiefer in den ganzen Sumpf wagen. Ich bin eigentlich noch dabei ToeB's Beispiel zu verdauen. Ist zwar Grundsätzlich, in der Form wie gepostet, nicht schwer aber ich bekomme es nicht hin Functionen in die Liste einzutragen die einen Paramter haben. ![]() Code: [AUSKLAPPEN] Local Test1:TFunc = TFunc.Create( func1(was_auch_immer:int ))
Ich denk das man dann auch an der Function Create des Type tFunc was ändern muss, wahrscheinlich auch beim finale aufrufen der Function aus der List, aber wie das geht ist mir noch ein rätsel. Alle versuche meinerseits führen zu Konvertierungsproblemen. @ToeB Wen du noch mal ne ruhige Minute hast, würd ich mich über einen Tipp freuen. Ich denke man könnte es auch so hin bekommen das man belibig viele Parameter in z.B. einen Type paken könnte dessen einziges Feld eine Liste ist. So wären alle Functionen von der gleichen Beschaffenheit. Nämlich alle mit exakt einem Parameter der auch noch immer vom selben Typ ist. |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem liegt daran, was ToeBs Beispiel für einen Funktionspointer verwendet (FuncPtr:Object()). Blitzmax funktioniert bei einer solchen Deklaration NUR mit Funktionen, die ein Objekt zurückgeben (":Object") und keine Parameter haben ("()").
Allerdings ist mir gerade wieder eine Möglichkeit in den Sinn gekommen, wie du das doch hinkriegen könntest: Deklariere deinen Pointer intern als Byte Ptr und caste dann zu dem Funktionspointer, den du brauchst. Dazu ein Beispiel. BlitzMax: [AUSKLAPPEN] SuperStrict Das Casten erfolgt implizit, indem du einfach deiner Pointervariable den aktuellen Byte Ptr zuweist. Noch ein paar Hinweise: ![]() ![]() SuperStrict Ich hoffe, das ist soweit verständlich. Viel Spaß. ^^' |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group