On the Fly Methoden? [Gelöst][Geht nicht!]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

ComNik

Betreff: On the Fly Methoden? [Gelöst][Geht nicht!]

BeitragMo, Feb 08, 2010 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Abend,

ich fürchte nein, aber: Gibt es eine Möglichkeit Methoden eines Types (also nicht abstract), on the Fly zu definieren?

Also das jedes Objekt eine individuelle Methode kriegt, die aber den gleichen Namen hat wie alle anderen.

Wie gesagt ich denke es gibt keine, und ich muss wohl oder übel externe Funktionen per Funktionszeiger nutzen.

Danke auf jeden Fall,
lg
ComNik
WIP: Vorx.Engine
  • Zuletzt bearbeitet von ComNik am Di, Feb 09, 2010 16:23, insgesamt einmal bearbeitet

hamZta

Administrator

BeitragDi, Feb 09, 2010 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Frage ist wohl eher die, was du damit machen willst. Ich kann mir nämlich jetzt noch keinen rechten Reim draus machen was du vorhast.

hamZta
Blog.

ComNik

BeitragDi, Feb 09, 2010 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will eine spezielle Art von "Bedingungs" Type. Jedes Objekt dieser Klasse braucht natürlich eine individuelle "Check" Methode.

Lg,
ComNik
WIP: Vorx.Engine

BladeRunner

Moderator

BeitragDi, Feb 09, 2010 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Da wirst Du um einen Function Pointer wohl nicht rumkommen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ComNik

BeitragDi, Feb 09, 2010 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Dachte ich mir.

Trotzdem Danke Smile
lg
ComNik
WIP: Vorx.Engine

hamZta

Administrator

BeitragMi, Feb 10, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du das vielleicht so?

BlitzMax: [AUSKLAPPEN]
Type TBaseCondition
Method check:Int(p1:Int, p2:Int) Abstract
End Type

Type TEqualCondition Extends TBaseCondition
Method check:Int(p1:Int, p2:Int)
Return (p1 = p2)
End Method
End Type

Type TLowerCondition Extends TBaseCondition
Method check:Int(p1:Int, p2:Int)
Return (p1 < p2)
End Method
End Type
Blog.

Progger93

BeitragMi, Feb 10, 2010 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube er meint es eher so:

BlitzMax: [AUSKLAPPEN]

Type TCondition
Method Check()
End Type

Local cond1:TCondition = New TCondition

Method cond1.Check()
'blabla
End Method


Local cond2:TCondition = New TCondition

Method cond2.Check()
'blublu
End Method


Was natürlich nich geht.
MfG Pascal
Win 7|T7250@2.0Ghz|3GB RAM|M8600GT

ComNik

BeitragMi, Feb 10, 2010 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Progger hat es erfasst. Abstract benötigt ja einen erbenden Type und das kann ich nicht nutzen.

Tja geht leider nicht. Nurmal so interresse halber, geht so was in anderen Sprachen? Gibts das überhaupt Rolling Eyes

lg
ComNik
WIP: Vorx.Engine

Xeres

Moderator

BeitragMi, Feb 10, 2010 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktionspointer in Verbindung mit Lua Skripten?
Du hast ja praktisch neben Hardcoden kaum eine Wahl, oder?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hamZta

Administrator

BeitragMi, Feb 10, 2010 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, das gibts so in keiner (mir bekannten) Sprache. Ich kann mir auch ganz ehrlich nicht vorstellen wozu man das gebrauchen könnte. Vielleicht beschreibst du dein Problem mal genauer?

lg,
hamZta
Blog.

D2006

Administrator

BeitragMi, Feb 10, 2010 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Java-Beispiel (aus der kalten, daher vllt nich ganz exakt):

Code: [AUSKLAPPEN]
// Button erstellen
JButton button = new JButton("Klick mich!");

// mit dem Interface ActionListener können wir den Code festlegen, der bei Klick ausgeführt werden soll
// dazu wird eine abstrakte Methode "on-the-fly" implementiert

button.addActionListener( new ActionListener() {

   @Override
   public void onAction() {
      // *was tolles machen*
      buttonWurdeGeklickt();
   }
});

Ich glaub "onAction" heißt anders, ändert ja aber nix am Prinzip. Ich find sowas praktisch.
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

ComNik

BeitragMi, Feb 10, 2010 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt das ist Praktisch, wird aber wahrscheinlich intern auch durch Pointer gelöst oder?

@hamzta: Progger hat es doch gut gezeigt an seinem Codebeispiel
Ich versuche einfach das jedes Objekt eines Types eine individuelle Methode hat.

lg
ComNik
WIP: Vorx.Engine
 

jsp

BeitragDo, Feb 11, 2010 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht sowas, falls die Functionpointer noch nicht das richtige sind und es wirklich Methoden sein sollen:
Jedes Object vom Type TCondition hat eine individuelle Methode, hier die check Methode.
Ist zwar auch abstract, aber man vererbt nicht direkt etwas sondern überschreibt nur die entsprechende Methode.

Code: [AUSKLAPPEN]
Type TCondition
   Field TheCondition:TSpecialCondition
   
    Method Check()
      TheCondition.Check()
   End Method
   
   Method Something()
      Print "aha"
   End Method
   
   '...

   Function Create: TCondition (TheCondition: TSpecialCondition)
      Local Condition: TCondition = New TCondition
      Condition.TheCondition = TheCondition
      Return Condition
   End Function

End Type

Type TSpecialCondition Abstract
   Method Check() Abstract
End Type


Type MyCondition Extends TSpecialCondition

   Method Check()
      Print "bla"
   End Method
   
   Function Create: TCondition ()
      Local SpecialCondition: MyCondition = New MyCondition
      Local Condition: TCondition = TCondition.Create(SpecialCondition)
      Return Condition
   End Function
End Type

Type MyCondition2 Extends TSpecialCondition

   Method Check()
      Print "blub"
   End Method
   
   Function Create: TCondition ()
      Local SpecialCondition: MyCondition2 = New MyCondition2
      Local Condition: TCondition = TCondition.Create(SpecialCondition)
      Return Condition
   End Function
   
End Type

Local cond1:TCondition = MyCondition.Create()
Local cond2:TCondition = MyCondition2.Create()

cond1.Check()
cond1.Something()
cond2.Check()
cond2.Something()
Logic Gui Professional a Gui Designer for MaxGui

hamZta

Administrator

BeitragDo, Feb 11, 2010 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
[quote="ComNik"]@hamzta: Progger hat es doch gut gezeigt an seinem Codebeispiel
Ich versuche einfach das jedes Objekt eines Types eine individuelle Methode hat.[quote]

Die Umsetzungsfrage hab ich schon kapiert, meine Frage war was du damit erreichen bzw. umsetzen willst.
Das Java-Beispiel finde ich persönlich nicht schön und würde ich auch aus Übersichtsgründen wohl nie verwenden, aber das ist ja Geschmackssache.

Sauberer finde ich da meine Lösung, einfach Vererbung dafür benutzen.

lg,
hamZta
Blog.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group