문제

LUA에서 알 수없는 길이의 테이블을 어떻게 결합 된 C ++ 함수로 전달합니까?

LUA 기능을 다음과 같이 호출하고 싶습니다.

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

테이블 내용을 배열 (바람직하게는 STL 벡터)에 복사합니까?

도움이 되었습니까?

해결책

사용하는 경우 Luabind 등록 된 통화만큼 간단합니다. 직접 굴러 가면 살펴 봐야합니다. lua_next 기능.

기본적으로 코드는 다음과 같습니다.

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
}

다른 팁

이것은 내 시도입니다 (오류 확인없이) :

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;
}

lua_objlen을 사용할 수도 있습니다.

주어진 허용 가능한 색인에서 값의 "길이"를 반환합니다. 문자열의 경우, 이것은 문자열 길이입니다. 테이블의 경우 이것은 길이 연산자 ( '#')의 결과입니다. userData의 경우, 이것은 userData에 할당 된 메모리 블록의 크기입니다. 다른 값의 경우 0입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top