我有一個名爲GetEnemiesLua的方法。我已經使用SWIG將此類綁定到lua,並且可以使用我的lua代碼調用此方法。在SWIG上返回一個lua表
我想獲得返回一個lua表的對象的方法。
這裏是我當前的代碼:
void CGame::GetEnemiesLua(){
std::vector<Unit*> enemies = callback->GetEnemyUnits();
if(enemies.empty()){
lua_pushnil(ai->L);
return;
} else{
lua_newtable(ai->L);
int top = lua_gettop(ai->L);
int index = 1;
for (std::vector<Unit*>::iterator it = enemies.begin(); it != enemies.end(); ++it) {
//key
lua_pushinteger(ai->L,index);//lua_pushstring(L, key);
//value
CUnit* unit = new CUnit(callback,*it,this);
ai->PushIUnit(unit);
lua_settable(ai->L, -3);
++index;
}
::lua_pushvalue(ai->L,-1);
}
}
PushIUnit如下:
void CTestAI::PushIUnit(IUnit* unit){
SWIG_NewPointerObj(L,unit,SWIGTYPE_p_IUnit,1);
}
爲了驗證這一點,我有以下代碼:
t = game:GetEnemiesLua()
if t == nil then
game:SendToConsole("t is nil! ")
end
的結果總是「 t是零「,儘管這是不正確的。我在代碼中加入了斷點,它確實在循環中,而不是在執行lua_pushnil
。
那麼如何讓我的方法通過lua調用時返回表?
現在這是一個更加優雅的解決方案^ _ ^ – 2010-05-06 15:42:25