Differenze tra le versioni di "Emulare i Puntatori a Funzione del linguaggio C mediante gli Oggetti"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
È possibile emulare in Gambas i Puntatori a Funzioni del linguaggio C tramite ''Oggetti''.
 
È possibile emulare in Gambas i Puntatori a Funzioni del linguaggio C tramite ''Oggetti''.
  
A seconda di come è strutturato il set di Funzioni e di quante ve ne sono nel codice, si possono adottare  almeno due modalità:
+
A seconda di come è strutturato il set di Funzioni e di quante ve ne sono nel codice, si possono adottare  almeno due modalità.
  
'''1''') Si definisce una Classe (usando le parole-chiave: ''Create Static'' ) che rappresenti la Funzione, e si implementa poi la Funzione nel suo Metodo speciale "_call()".
+
 
 +
===Uso del Metodo speciale "_call()"===
 +
Si definisce una Classe (usando le parole-chiave: ''Create Static'' ) che rappresenti la Funzione, e si implementa poi la Funzione nel suo Metodo speciale "_call()".
 
<BR>Così è possibile passare quella Classe (che in realtà è un Oggetto ''singleton'') come una sorta di Puntatore a Funzione surrogato.
 
<BR>Così è possibile passare quella Classe (che in realtà è un Oggetto ''singleton'') come una sorta di Puntatore a Funzione surrogato.
  
Riga 25: Riga 27:
 
  End
 
  End
  
'''2''') Definire una Classe (usando le parole-chiave: ''Create Static'' ) che rappresenti l'intero set di Funzioni. Quella Classe deve implementare funzioni di nomi noti a cui fare riferimento in seguito.
+
 
 +
===Uso di nomi noti delle Funzioni a cui fare riferimento===
 +
'''2''') Definire una Classe (usando le parole-chiave: ''Create Static'' ) che rappresenti l'intero set di Funzioni. Quella Classe deve implementare funzioni di nomi noti a cui fare riferimento in seguito nlla Classe o nel Modulo principale.
  
 
Esempio pratico in cui si crea la Classe "secondaria", contenente tre Funzioni, e che chiameremo "Class1.class":
 
Esempio pratico in cui si crea la Classe "secondaria", contenente tre Funzioni, e che chiameremo "Class1.class":

Versione delle 21:18, 19 gen 2022

È possibile emulare in Gambas i Puntatori a Funzioni del linguaggio C tramite Oggetti.

A seconda di come è strutturato il set di Funzioni e di quante ve ne sono nel codice, si possono adottare almeno due modalità.


Uso del Metodo speciale "_call()"

Si definisce una Classe (usando le parole-chiave: Create Static ) che rappresenti la Funzione, e si implementa poi la Funzione nel suo Metodo speciale "_call()".
Così è possibile passare quella Classe (che in realtà è un Oggetto singleton) come una sorta di Puntatore a Funzione surrogato.

Di seguito un esempio pratico in cui si crea la Classe secondaria che emula il Puntatore a Funzione e che chiameremo "Class1.class":

Create Static

Public Sub _call(Variabile As String)
  Print Variabile
End

Nella Classe o Modulo principale avremo:

Public Sub Main()

 PassaUnPuntatoreAFunzione(Class1)

End

Public Sub PassaUnPuntatoreAFunzione(Funz As Object)

 Funz("testo qualsiasi")

End


Uso di nomi noti delle Funzioni a cui fare riferimento

2) Definire una Classe (usando le parole-chiave: Create Static ) che rappresenti l'intero set di Funzioni. Quella Classe deve implementare funzioni di nomi noti a cui fare riferimento in seguito nlla Classe o nel Modulo principale.

Esempio pratico in cui si crea la Classe "secondaria", contenente tre Funzioni, e che chiameremo "Class1.class":

Create Static

Public Sub Funzione1(Messaggio As String)

Print Messaggio

End

Public Sub Funzione2(Messaggio As String)

 Print Messaggio

End

Public Sub Funzione3(Messaggio As String)

 Print Messaggio

End

Nella Classe o Modulo "principale" invece avremo:

Public Sub Main()

 PassaUnSetDiFunzioni(Class1, ["Funzione1", "Funzione2", "Funzione3"])

End

Public Sub PassaUnSetDiFunzioni(Set As Object, Funzioni As String[])
 
 Dim funz As String
 Dim indice As Integer

 For Each funz In Funzioni
   Object.Call(Set, funz, [funz & " #" & indice])
   Inc indice
 Next

End