Trong C++, tôi có một số map<string, string>
, có chứa một số mục không xác định. Làm thế nào tôi có thể vượt qua điều này để một chức năng Lua, để các Lua chức năng có thể sử dụng dữ liệu như một bảng?Làm cách nào để tạo Bảng Lua trong C++ và chuyển nó sang hàm Lua?
9
A
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 ...
Sao chép bản đồ vào một bảng Lua mới, và vượt qua bảng Lua.
Tạo một proxy table rằng đạo đọc và viết thông qua một metatable
__index
và__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 pairs
là in the wiki và this mailing list thread. Generalized pairs
dự kiến cho Lua 5.2
Các vấn đề liên quan
- 1. Gói thư viện C cho Lua: làm cách nào để tạo các bảng hàm lồng nhau?
- 2. Làm thế nào để trả về mảng như bảng từ hàm C sang lua?
- 3. Làm cách nào để lặp qua bảng trong Lua?
- 4. Làm cách nào để chuyển danh sách các đối tượng từ C++ sang Lua?
- 5. Làm cách nào để tạo bảng trong Lua, sau đó thêm giá trị từ API C?
- 6. Lua: chuyển đổi từ phao sang int
- 7. Chuyển con trỏ cấu trúc C sang tập lệnh lua
- 8. Tham chiếu đến hàm Lua trong C/C++
- 9. Làm cách nào để tải và thực thi tệp lua từ một tệp lua khác
- 10. bảng bên trong bảng trong Lua
- 11. Làm thế nào để tạo bảng Lua lồng nhau bằng cách sử dụng C API
- 12. Làm cách nào để chuyển các tham số vào tệp Lua khi tải nó từ một tệp Lua khác?
- 13. Tra cứu bảng Lua
- 14. Làm cách nào để tạo một mảng 2D trong Lua?
- 15. Lưu trữ một hàm Lua?
- 16. Chuyển tiếp định nghĩa một hàm trong Lua?
- 17. Lua, Lua là gì?
- 18. Chức năng tạo trong Lua
- 19. Làm cách nào để bạn dán mã Lua vào C++?
- 20. Đăng ký chức năng C trong bảng Lua
- 21. Làm cách nào để tạo đối tượng lớp trong API Lua-C 5.2?
- 22. Cách tốt nhất để tạo mảng bit lớn trong Lua
- 23. Làm thế nào để loại bỏ một mục nhập bảng lua bằng khóa của nó?
- 24. Cách tạo lớp, phân lớp và thuộc tính trong Lua?
- 25. Sắp xếp một Bảng [] trong Lua
- 26. Làm cách nào để bỏ qua các kết quả đầu tiên từ một hàm trong Lua?
- 27. Lua, C++ và metatables biến mất
- 28. Nhúng Lua vào C++
- 29. Nhúng Lua vào C++
- 30. Nhận lệnh lua khi hàm c được gọi là
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. –
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