2009-01-17 11 views
9

सी ++ में, मेरे पास map<string, string> है, जिसमें अज्ञात संख्या में प्रविष्टियां हैं। मैं इसे लुआ फ़ंक्शन में कैसे पास कर सकता हूं, ताकि लुआ फ़ंक्शन डेटा को तालिका के रूप में उपयोग कर सके?मैं सी ++ में लूआ टेबल कैसे बना सकता हूं, और इसे लुआ फ़ंक्शन में पास कर सकता हूं?

उत्तर

18

की उम्मीद है, तो आप एक असली 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); 
} 
में प्रतिस्थापित अपने नक्शे के लिए सही प्रकार के साथ

..

5

एक जोड़े विकल्प ...

  1. कॉपी एक नया लुआ तालिका में नक्शा, और लुआ तालिका गुजरती हैं।

  2. एक proxy table कि पढ़ता निर्देशन और एक metatable के __index और __newindex metamethods

(1) है सब नकल करने के लिए दोष के माध्यम से लिखते हैं, निश्चित रूप से बनाएँ।

दोष करने के लिए (2) कि pairs() प्रॉक्सी तालिका

सामान्यीकृत pairs के लिए लुआ को ठीक करता है, इसकी चर्चा in the wiki और this mailing list thread है पर काम नहीं करेगा है। सामान्यीकृत pairs के लिए Lua 5.2

+0

यह बहुत मुश्किल पुनरावर्तक जोड़ने के लिए नहीं होना चाहिए मेटाटेबल को फ़ंक्शन करें जो टेबल के लिए जोड़े() की तरह उपयोग किया जा सकता है। –

+0

मैं आमतौर पर विकल्प 2 करता हूं; जब तक कि तालिका छोटी न हो और अधिकतर पढ़ने-योग्य तालिका में बहुत सारे अनुरोध हों। – Javier

संबंधित मुद्दे

 संबंधित मुद्दे