9

C++ にはmap<string, string>、不明な数のエントリを含む があります。Lua関数がデータをテーブルとして使用できるように、これをLua関数に渡すにはどうすればよいですか?

4

2 に答える 2

19

実際の lua テーブルが必要な場合:

lua_newtable(L);
int top = lua_gettop(L);

for (std::map::iterator it = mymap.begin(); it != mymap.end(); ++it) {
    const char* key = it->first.c_str();
    const char* value = it->second.c_str();
    lua_pushlstring(L, key, it->first.size());
    lua_pushlstring(L, value, it->second.size());
    lua_settable(L, top);
}

マップの適切なタイプを..に置き換えます。

于 2009-01-19T22:32:58.997 に答える
5

いくつかのオプション...

  1. マップを新しいLuaテーブルにコピーし、Luaテーブルを渡します。

  2. メタテーブルとメタメソッドを介して読み取りと書き込みを指示するプロキシテーブルを作成します__index__newindex

もちろん、(1)の欠点はすべてのコピーです。

(2)の欠点はpairs()、プロキシテーブルでは機能しないことです。

一般化のためのLuaの修正についての議論はpairswikiこのメーリングリストスレッドにあります。Lua5.2では一般化pairsが期待されています

于 2009-01-17T18:43:30.780 に答える