2011-02-16 7 views
3

J'enchaîne Lua dans une application C++ et je veux fournir une fonction print() (ou peut-être simplement surcharger la fonction d'impression de Lua), pour pouvoir transmettre des variables de types de données simples (string, boolean et number) dans mon application C++ en tant que chaînes.Passer une variable Lua à C

Alors ce que je cherche à faire est d'avoir une fonction C++, que j'exporte vers Lua, appelé my_print()

Je peux alors appeler my_print() dans un morceau Lua comme ceci:

a = 22/7 
b = false 
c = 42 
my_print('The value of variable a is: ' .. a) 
my_print('b: ' .. b) 
my_print('c is: ' .. c) 

Chaque fois que my_print() est appelée, elle transmet une chaîne C++ à l'application C++. J'ai regardé l'API de Lua C, je suppose que je devrais utiliser lua_gettop (L), lua_type() etc.

Un petit extrait sur la façon de commencer à écrire une telle fonction C/C++ peut être exporté à Lua et utilisé de la manière décrite ci-dessus, serait très appréciée.

Répondre

4

Avez-vous examiné la mise en œuvre de print et d'autres fonctions de la bibliothèque Lua standard? Vous pouvez commencer par lmathlib.c. Voir http://www.lua.org/source/5.1/. Essayez aussi etc/min.c à partir de l'archive tar source.

0

Si vous le faites comme vous l'avez dans votre exemple, le seul argument my_print obtient est déjà une chaîne (ou mieux lua_lstring), car les valeurs sont forcées au type chaîne par l'opérateur de concaténation ... Seule la chose false ne fonctionnera pas. donc juste passer tostring(var) fonctionnera dans la plupart des cas. Pour plus de contrôle, jetez un oeil à string.format.

1

Vous devriez jeter un oeil à ce http://www.lua.org/source/5.1/lbaselib.c.html#luaB_tostring

ils sont ici la chaîne de retour, mais il est un bon point de départ. Je ne peux pas vraiment être en désaccord avec lhf mais cela concerne le __tostring de la table meta alors que min.c ne le fait pas. Je pense que c'est très important, surtout quand vous entrez dans Lua oo.

Questions connexes