GLBasic Benutzerhandbuch

Main sections

PROTOTYPE

PROTOTYPE proto: arg1%$ arg2%$ ...



Das Thema ist sehr komplex und für Anfänger nicht zu empfehlen.

Mit PROTOTYPE definiert man einen Funktions-Typ, ohne die Funktion wirklich zu definieren. Dadurch ist es möglich Zeiger auf eine Funktion als Variable zu speichern.
LOCAL ftpptr AS proto

Später kann man dann die Variable zuweisen und somit eine bestehende Funktion aufrufen:
ftpptr = test
ftpptr(1,2)

FUNCTION test: a,b
ENDFUNCTION


Die Funktionszeiger dürfen auch Mitglieder in einem TYPE sein:
TYPE TT
ptr AS proto
ENDTYPE


Um abzufragen ob eine Funktion zugewiesen ist, kann man IF benutzen:
LOCAL foo AS proto
IF foo = FALSE THEN STDOUT "Keine Funktion\n"
foo = test
IF foo THEN STDOUT "Jetzt mit Funktion\n"


Ruft man einen nicht zugewiesene Funktionszeiger auf, stoppt das Programm mit einer Fehlermeldung.

Beispiel:
PROTOTYPE func_proto: a

TYPE Tfoo
    moo AS func_proto
ENDTYPE

LOCAL pFoo AS func_proto
    IF pFoo=FALSE THEN STDOUT "has no pointer\n"
    pFoo = f1
    pFoo(1)

    pFoo = f2
    pFoo(2)

    call(pFoo)


    LOCAL tp AS Tfoo
    tp.moo = f1
    tp.moo(4)

    ALIAS fkt AS tp.moo
    fkt(5)
    KEYWAIT


FUNCTION f1: one
    STDOUT "f1: "+one+"\n"
ENDFUNCTION


FUNCTION f2: a
    STDOUT "f2: "+a+"\n"
ENDFUNCTION

FUNCTION call: foo AS func_proto
    foo(3)
ENDFUNCTION

See also...