Ho una funzione nidificata relativamente in profondità in una serie di tabelle. C'è un modo in C/C++ per ottenere un "riferimento" a quella funzione e spingere quel (e args) nello stack quando ho bisogno di usarlo?Riferimento alla funzione Lua in C/C++
risposta
Questo è ciò che è lo reference system. La funzione chiama r = luaL_ref(L, LUA_REGISTRYINDEX)
memorizza il valore nella parte superiore della pila nel registro e restituisce un numero intero che può essere memorizzato sul lato C e utilizzato per recuperare il valore con la chiamata di funzione lua_rawgeti(L, LUA_REGISTRYINDEX, r)
.
Vedere il PiL chapter, così come la documentazione di luaL_ref()
, lua_rawgeti()
, e luaL_unref()
per la storia completa.
L'API Lua (http://www.lua.org/manual/5.1/manual.html#3) può essere utilizzata per accedere a qualsiasi membro di tabella desiderato. Usa lua_gettable() per estrarre un membro della tabella e posizionarlo sullo stack lua, se il membro è anche una tabella chiama nuovamente lua_gettable() per accedere a questa tabella, e così via ...
(A seconda di cosa 're facendo lua_rawget() potrebbe essere una scelta migliore di lua_gettable())
Addtional in risposta a commentare:
Va bene che è un po' più interessante. Bene, una tabella è un oggetto di riferimento (più o meno), quindi potresti essere sicuro di salvare la tabella più interna di riferimento da qualche parte.
Dato che l'API lua non sembra avere comunque la possibilità di manipolare direttamente i valori di riferimento della tabella, è probabile che si debba spingere il riferimento in un globale oppure, se non funziona, una nuova tabella con una singola voce di tabella. Quando vuoi l'arbitro più tardi, prendilo dal globale.
ad es.
- 1. accoda alla funzione lua
- 2. Passare l'oggetto C++ alla funzione Lua
- 3. Riferimento alla funzione membro?
- 4. Riferimento alla funzione costruttore
- 5. Riferimento debole Lua
- 6. Gli argomenti Lua passati alla funzione nella tabella sono nil
- 7. CMake "riferimento alla funzione non definito"
- 8. Errore "riferimento non definito alla funzione"
- 9. riferimento php array passando alla funzione
- 10. riferimento non definito alla funzione modello
- 11. riferimento alla Funzione Sintassi - con e senza &
- 12. Il riferimento alla funzione è ambiguo
- 13. Passaggio di un riferimento alla funzione come riferimento universale
- 14. Cambia riferimento alla funzione in fase di esecuzione in Python
- 15. chiamando la funzione Lua
- 16. "riferimento alla funzione" come risultato di una funzione
- 17. Come attivare il riferimento alla funzione in WebStorm/PHPStorm?
- 18. Inoltra definire una funzione in Lua?
- 19. Codice indentazione Lua in Lua
- 20. Chiamare la funzione Lua 5.2 da C++
- 21. PHP Mail, CC Field
- 22. Lua salto alla linea di destra
- 23. Riferimento non definito alla funzione non membro - C++
- 24. setTimeout() con stringa o riferimento alla funzione (anonima)? speedwise
- 25. Il riferimento alla funzione membro non statico deve essere chiamato
- 26. C++: è normale passare il riferimento matrice alla funzione
- 27. Funzionamento CC-Tray
- 28. Riferimento indefinito alla variabile globale durante il collegamento
- 29. Strana convalida Javascript in dreamweaver CC
- 30. Riferimento alla libreria ZXing.Net
So già come farlo :) Voglio ottenere una funzione referenziata nidificata in profondità nelle tabelle in modo che possa in seguito chiamare la funzione senza attraversare tutte quelle tabelle. – jameszhao00
[Aggiunto alla risposta] –