2009-01-17 45 views

Trả lời

18

nếu bạn muốn có một bảng lua thực:

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

với các loại phù hợp với bản đồ của bạn thay thế trong ..

5

Một vài tùy chọn ...

  1. Sao chép bản đồ vào một bảng Lua mới, và vượt qua bảng Lua.

  2. Tạo một proxy table rằng đạo đọc và viết thông qua một metatable __index__newindex metamethods

Hạn chế đến (1) là tất cả các sao chép, tất nhiên.

Hạn chế đến (2) là pairs() sẽ không hoạt động trên bảng Proxy

Một cuộc thảo luận về bản sửa lỗi cho Lua cho tổng quát pairsin the wikithis mailing list thread. Generalized pairs dự kiến ​​cho Lua 5.2

+0

Nó không nên quá khó khăn để thêm một iterator chức năng để metatable có thể được sử dụng giống như cặp() cho bảng. –

+0

tôi thường làm tùy chọn 2; trừ khi bảng nhỏ và có rất nhiều yêu cầu đối với một bảng chỉ đọc. – Javier

Các vấn đề liên quan