Differenze tra le versioni di "Emulare i Puntatori a Funzione del linguaggio C mediante gli Oggetti"
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à. |
− | + | ||
+ | ===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