Как получить несколько возвращаемых значений при вызове c ++ из сценариев lua? - PullRequest
0 голосов
/ 09 ноября 2010
//c++ funciton definition
int LS_SomeFucntion(LuaState* state)
{
LuaStack args(state);
//.. 
set<int>::iterator it = mySet.begin();
for(; it != mySet.end(); ++it)
{
    state.pushInteger(*it);
}
return mySet.size();

}

state->GetGlobals().Register("SomeFunction",LS_SomeFunction);

//lua scripts
??? = SomeFunction()

Как получить возвращаемое значение SomeFunction () в сценариях lua когда размер не знает когда вызывается функция?

1 Ответ

4 голосов
/ 09 ноября 2010

Вы можете захватить все возвращаемые значения в таблице:

local rv = { SomeFunction() }

print('SomeFunction returned', #rv, 'values')
for i,val in ipairs(rv) do
    print(i,val)

Или обработать их, используя список переменных параметров:

function DoSomething(...)
   local nargs = select('#', ...)
   print('Received', nargs, 'arguments')
   for i=1,nargs do
      print(i,select(i,...))
end

DoSomething(SomeFunction())

Конечно, ваша функция C должна, вероятно, простовернуть таблицу Lua, содержащую элементы списка.Я не знаком с LuaPlus, но, судя по документации здесь , вы захотите что-то вроде этого:

int LS_SomeFunction(LuaState* state)
{
   LuaObject table;
   table.AssignNewTable(state, mySet.size()); // presize the array portion

   int i = 1;
   for(set<int>::iterator it = mySet.begin(); it != mySet.end(); ++it)
       table.SetNumber(i++, *it);

   table.PushStack();
   return 1;
}

Тогда вы просто скажете:

local rv = SomeFunction()
print('SomeFunction returned', #rv, 'values')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...