En C++, j'ai un map<string, string>
, contenant un nombre inconnu d'entrées. Comment est-ce que je peux passer ceci à une fonction de Lua, de sorte que la fonction de Lua puisse employer les données comme table?Comment créer une table Lua en C++ et la passer à une fonction Lua?
9
A
Répondre
18
si vous voulez une vraie table de Lua:
lua_newtable(L);
int top = lua_gettop(L);
for (std::map::iterator it = mymap.begin(); it != mymap.end(); ++it) {
const char* key = it->first.c_str();
const char* value = it->second.c_str();
lua_pushlstring(L, key, it->first.size());
lua_pushlstring(L, value, it->second.size());
lua_settable(L, top);
}
avec les bons types pour votre carte substitués en ..
5
A couple d'options ...
Copier la carte dans une nouvelle table Lua, et passer la table Lua.
Créer une proxy table qui dirige lit et écrit par un
__index
de MetaTable et__newindex
les métaméthodes
L'inconvénient (1) est tout la copie, bien sûr.
L'inconvénient (2) est que pairs()
ne fonctionnera pas sur la table proxy
Une discussion de corrections à Lua pour pairs
généralisée est in the wiki et this mailing list thread. Généralisée pairs
devrait pour Lua 5.2
Questions connexes
- 1. Comment passer une liste d'objets de C++ à Lua?
- 2. Référence à la fonction Lua en C/C++
- 3. itération à travers une table Lua à partir de C++?
- 4. Lua table lookup
- 5. Lua et C-struct
- 6. Passer des variables entre C++ et Lua via Swig
- 7. comment obtenir la fermeture à lua?
- 8. Liaisons Lua: table vs userdata
- 9. Comment coller le code Lua en C++?
- 10. Lua: utiliser la table comme arguments
- 11. Comment charger et exécuter un fichier lua à partir d'un autre fichier lua
- 12. Lua bindings à C++ et la collecte des ordures
- 13. Comment créer une classe, une sous-classe et des propriétés dans Lua?
- 14. Constructeur de tables lua
- 15. Débogage intégré Lua
- 16. Rechercher un élément dans une liste Lua
- 17. Incorporation: mono vs lua
- 18. Comment puis-je partager des données entre C++ et Lua?
- 19. Lua scripting implementation
- 20. Passer un tableau 2d pour fonctionner dans Lua
- 21. Comment puis-je pousser une instance d'une classe C++ encapsulée avec swig sur une pile lua?
- 22. Comment faire des opérations de table lua à partir de C?
- 23. SWIG Lua et matrices de passage
- 24. C#: Comment passer null à une fonction attend une ref?
- 25. Demande le type Lua userdata à partir de C
- 26. Lua COM Programmation
- 27. Closures Lua dans la mise en œuvre d'un DSL
- 28. Exposition d'objets C# à l'écriture de scripts Lua
- 29. comment itérer des caractères individuels dans une chaîne Lua?
- 30. VB6 - Lua Integration
Il ne devrait pas être trop difficile d'ajouter un itérateur fonction à la métatable qui peut être utilisé tout comme les paires() pour les tables. –
Je fais habituellement l'option 2; à moins que la table soit petite et qu'il y ait beaucoup de demandes à une table en lecture seule. – Javier