2017-11-03 8 views
0

私はLuaスクリプトに整数のリストを与え、それらを反復しようとしています。Sol2がベクトルを反復処理できない

私は取得していますエラーは次のとおりです。

test.lua:12: bad argument #1 to 'pairs' (table expected, got userdata) stack traceback: [C]: in function 'pairs' test.lua:12: in main chunk

使用されているC++コード:

#include <sol.hpp> 

struct Test { 
    std::vector<int> a; 
}; 

int main(void) { 
    sol::state lua; 

    lua.open_libraries(sol::lib::base); 

    lua.new_usertype<Test>("test", 
     "a", &Test::a); 

    lua.script_file("test.lua", [](lua_State* L, sol::protected_function_result pfr) { 
     sol::error err = pfr; 
     std::cout << err.what() << std::endl; 
     return pfr; 
    }); 
} 

のLuaスクリプト:

t = test.new() 

for i in pairs(t.a) do 
    print(i) 
end 

答えて

0

pairsはLuaの関数でありますそれはタイプの1つの変数しか取らないを入力します。 tはタイプuserdataであり、したがってエラーです。

https://www.lua.org/manual/5.3/manual.html#pdf-pairs

あなたはここで2つのオプションがあります。

  • をあなたはpairs
にそれを養うbeforテーブルにあなたのユーザデータの種類を扱うことができる pairsのバージョン
  • コピーのすべての要素を実装

    ベクトル上でペアを使用することに意味があるかどうかも尋ねてください。ループの数値はもっと自然に感じるでしょう。私も好むだろうipairs以上pairs