मुझे यह प्रश्न इस चीनी ब्लॉग http://chenyufei.info/blog/2011-02-28/wrap-c-function-closure-gcc-nested-function/ से मिलता है लेखक लेखक सी भाषा में बंद करना चाहते हैं, और उन्होंने पाया कि जीसीसी में नेस्टेड फ़ंक्शन (और बंद) की क्षमता है। उदाहरण के लिए:रैप और कॉल सी फ़ंक्शन के बारे में
typedef int (*func_t)(int arg);
int foo(int a) {
return a + 1;
}
func_t create_wrap_function(func_t f) {
int wrapped(int arg) {
// call original function
int val = f(arg);
fprintf(log_func_call, "arg: %d ret: %d", arg, val);
return val;
}
return wrapped;
}
लेकिन यह सामान्य समाधान नहीं है। create_wrap_function ने फ़ंक्शन प्रारूप को ठीक किया है, क्योंकि func_t प्रारूप को सीमित करता है।
जैसा कि हम जानते हैं, लुआ बंद हो गया है, और सी समारोह भी कॉल कर सकता है। मैं इसे कार्यान्वित करना चाहता हूं जैसे: हम जो फ़ंक्शन कॉल करना चाहते हैं वह foo1 और foo2 है, उनके पास विभिन्न प्रकार के तर्क और वापसी मूल्य हैं। Do_Lua_Wrap में
lua_returnValue returnValue1 = Do_Lua_Wrap(__FILE__, __LINE__, foo1, 1);
lua_returnValue returnValue2 = Do_Lua_Wrap(__FILE__, __LINE__, foo2, "string data", 1.2345);
, यह लुआ कार्य करने के लिए foo1 और 1 पारित तो सामान्य प्रक्रिया की तरह समारोह foo1 कॉल करेगा:
int foo1(int a) {
...
return intValue;
}
double foo2(char* str, double a) {
...
return dblValue;
}
सी क्लाइंट में, जैसे फ़ंक्शन को कॉल करें। फिर foo2 और एक char * और Lua फ़ंक्शन के लिए एक डबल मान पास करें, फिर सामान्य प्रक्रिया की तरह foo2 फ़ंक्शन को कॉल करें। लुआ फ़ंक्शन में, यह FILE और LINE और फ़ंक्शन तर्कों के बारे में कुछ अतिरिक्त लॉग लिखने के बारे में जानकारी लॉग कर सकता है।
लेकिन मुझे इस बारे में कोई जानकारी नहीं है कि समारोह को कैसे लिखना है D_Lua_Wrap सी और लुआ में, क्या यह संभव है?
यदि संभव हो, तो क्या आप मुझे कुछ सलाह दे सकते हैं?
आपका उत्तर बहुत अच्छा है! – sagasw