2009-05-26 7 views
1

Ich stelle fest, dass SWIG in den generierten SWIG-Wrappern für eine gegebene Gruppe von Klassen eine Liste von C-String-Repräsentationen aller Elternklassen aus was diese Klasse erbt. (char ** Basisnamen). Ich weiß, dass es eine Funktion(SWIG/Lua) Wie man auf die Liste der Basis-/Elternklassen in swig_lua_class zugreift

swig_type(some_variable) 

gibt, die eine Zeichenfolgendarstellung des Datentyps einer bestimmten Variablen zurückgibt. Gibt es auch eine Funktion, die eine Tabelle der Elternklassen als Strings zurückgibt? Wenn nicht, gibt es eine einfache Möglichkeit, diese Funktion zu schreiben? Ich kenne das Innenleben von SWIG überhaupt nicht.

Danke!

Antwort

3

wie dieses Etwas sollte (nicht getestet, da ich mit Lua verwenden SWIG nicht) Arbeit:

// insert into runtime section 
// this is the C function that iterates over the base_names array 
// (I'm assuming that the array is terminated with a NULL) 
%runtime %{ 
    /* lua callable function to get the userdata's type */ 
    SWIGRUNTIME int SWIG_Lua_basenames(lua_State* L) 
    { 
     swig_lua_userdata* usr; 
     swig_lua_class* clss = NULL; 
     int i = 0; 
     if (lua_isuserdata(L,1)) 
     { 
     usr=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */ 
     if (usr && usr->type && usr->type->clientdata) { 
      // fetch the swig_lua_class struct, it contains the base_names 
      clss = (swig_lua_class*)usr->type->clientdata; 
     } 
     } 
     /* create a new table with all class base names in it 
     note that I create it even if clss is NULL, that way 
     an empty table -should- be returned 
     */   
     lua_newtable(L); 
     while(clss && clss->base_names[i]) { 
     lua_pushnumber(L, i+1); /* lua tables are 1-indexed */ 
     lua_pushstring(L, clss->base_names[i]); 
     lua_rawset(L, -3); 
     i++; 
     } 
     return 1; 
    } 
%} 
%init %{ 
    /* this goes into the user init function, register our new function with 
    Lua runtime 
    */ 
    SWIG_Lua_add_function(L,"swig_base_names",SWIG_Lua_basenames); 
%} 
+0

Erste Tests zeigen, dass Ihr Code wie ein Champion funktioniert! Vielen Dank, das ist eine große Hilfe! – zslayton