Question

Comment puis-je passer une table de longueur inconnue de Lua dans une fonction C ++ lié?

Je veux être en mesure d'appeler la fonction Lua comme ceci:

call_C_Func({1,1,2,3,5,8,13,21})

et copiez le contenu de la table dans un tableau (de préférence vecteur STL)?

Était-ce utile?

La solution

Si vous utilisez LuaBind il est aussi simple que d'un appel enregistré. Quant à rouler votre propre, vous devez jeter un oeil à la fonction lua_next .

Fondamentalement, le code est le suivant:

lua_pushnil(state); // first key
index = lua_gettop(state);
while ( lua_next(state,index) ) { // traverse keys
  something = lua_tosomething(state,-1); // tonumber for example
  results.push_back(something);
  lua_pop(state,1); // stack restore
}

Autres conseils

Ce serait ma tentative (sans vérification d'erreur):

int lua_test( lua_State *L ) {
    std::vector< int > v;
    const int len = lua_objlen( L, -1 );
    for ( int i = 1; i <= len; ++i ) {
        lua_pushinteger( L, i );
        lua_gettable( L, -2 );
        v.push_back( lua_tointeger( L, -1 ) );
        lua_pop( L, 1 );
    }
    for ( int i = 0; i < len; ++i ) {
        std::cout << v[ i ] << std::endl;
    }
    return 0;
}

Vous pouvez également utiliser lua_objlen:

  

Retourne la « longueur » de la   La valeur à l'index acceptable suivant:   pour les chaînes, c'est la chaîne   longueur; pour les tables, cela est le résultat   de l'opérateur de longueur ( « n »); pour   userdata, c'est la taille de la   bloc de mémoire alloué à la   données d'utilisateur; pour d'autres valeurs, il est égal à 0.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top