मेरी वर्तमान परियोजना के लिए, मैं लूआ रैपर को बहुत सी सी/सी ++ लिख रहा हूं। इनमें से एक बड़ी संख्या में सरल setters और getters हैं, इसलिए मैं कुछ टेम्पलेट्स कि, यह आसान इन उत्पन्न करने के लिए बनाने के इतने तरह लिखने में सफल:सामान्य लूआ फ़ंक्शन रैपर बनाने के लिए वैरैडिक टेम्पलेट्स का उपयोग कैसे करें?
// Class Return Field
template <typename T, typename U, U T::*Member>
int luaU_get(lua_State* L)
{
T* obj = luaW_check<T>(L, 1);
luaU_push<U>(L, obj->*Member);
return 1;
}
static luaL_reg Foo_Table[] =
{
...
// Now I can just use this generic template to avoid
// writing simple getter functions
{ "getbar", luaU_get<Foo, Bar, &Foo::bar> },
...
};
मैं मनमाना कार्यों के लिए सरल समारोह रैपर के लिए कुछ इसी तरह करना चाहते हैं भी। उदाहरण के लिए, यह ऐसा करने के लिए सक्षम होने के लिए अच्छा होगा:
template <typename T, typename U, U (T::*Func)(), typename... Args>
int luaU_func(lua_State* L)
{
// ...?
}
static luaL_reg Foo_Table[] =
{
...
{ "baz", luaU_func<Foo, int, &Foo::baz, int, float> },
...
};
विचार यह है कि टेम्पलेट को प्रभावी ढंग से बाहर कर देते हैं इस होना करने के लिए जब संकलित: बस का उपयोग कर
int luaU_func(lua_State* L)
{
luaU_push<int>(L, luaW_check<Foo>(L, 1)->baz(luaU_check<int>(L, 2), luaU_check<float>(L, 3)));
return 1;
}
मैं कोशिश की है ...
विस्तारक, मेरे लिए समस्या उचित तर्कों को मैप करने के लिए पूर्णांक सूचकांक मान है। मैं उन्हें सही काम करने के तरीके के बारे में नहीं सोच सकता। क्या ऐसी चीज भी संभव है?
(वहाँ जादू पहले से ही यहाँ पर जा रहा का एक छोटा सा है, मैं lua_push और lua_check जैसी चीजों के लिए कुछ टेम्प्लेट की गई रैपर लिखा उन मौजूदा रैपर के सभी here पाया जा सकता है।)
क्या आपने [luabind] (http://www.rasterbar.com/products/luabind.html) पर एक नज़र डाली है? –
क्या आप सुझाव दे रहे हैं कि मैं लुबाइंड का उपयोग करता हूं? या उन्होंने एक ऐसी समस्या हल की जिसे मैं संदर्भ के लिए उपयोग कर सकता हूं? (मुझे कई कारणों से मेरी परियोजना के लिए लुइबिंड का उपयोग करने में दिलचस्पी नहीं है।) – Alex
मुझे यकीन नहीं था कि आप इसके बारे में जानते हैं या नहीं। वैसे भी, तर्क और अनुक्रमणिका समस्या के लिए, [यहां मूल विचार है] (http://stackoverflow.com/a/8028333/168225)। –