Question

Je peux être mal compris leur utilisation ou mal lu la documentation, mais comment puis-je accéder aux membres d'une classe ou struct passé à Lua comme userdata lumière? Par exemple, si un vecteur en utilisant la struct suivante

typedef struct Foo {
  int x;
  int y;
} Foo;

a été déclarée comme 'test' et défini comme quelque chose comme x = 413 et y = 612, et poussé par un appel

lua_pushlightuserdata( L, (void *) &test ) ;

Quel serait le code Lua d'une fonction qui manipule ou imprime x et y regarder comme?

Était-ce utile?

La solution

Lumière UserData Lua est juste un pointeur. Lua n'a pas comprendre comment lire le contenu de l'objet référencé par le pointeur. Le but de ces données est de permettre un appel C API pour passer une référence à un autre appel API.

Si vous voulez travailler avec des données en Lua, vous devez pousser sur la pile, et dans votre cas, je ferais une table. Si vous avez besoin de ces données synchronisées entre C et Lua, alors vous aurez besoin d'écrire des fonctions dans les deux côtés pour gérer l'affectation et de copier la valeur à l'autre environnement. L'autre option est d'avoir les données que dans Lua et récupérer via une API Lua quand en C, ou d'avoir en C et le récupérer via une API C (que vous créez) quand dans Lua.

Pour plus d'informations, programmation en Lua et Lua utilisateurs Wiki ont chacun une brève description.

Autres conseils

Rien. Vous ne pouvez pas accéder ou faire quoi que ce soit avec UserData de toute sorte de Lua. Vous devez fournir les fonctions de C pour toutes les manipulations. Bien sûr, cela peut être facilitée par l'utilisation correcte de métafonctions.

Oh, et vous n'avez pas besoin que la merde de typedef struct en C ++. Vous pouvez juste dire

struct Foo {
    int x;
    int y;
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top