我從這個中文博客中得到這個問題http://chenyufei.info/blog/2011-02-28/wrap-c-function-closure-gcc-nested-function/ 作者想用c語言實現閉包,他發現GCC有嵌套函數(和閉包)的能力。 例如:關於換行和調用C函數
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限制了格式。
我們知道,Lua已經關閉了,並且也可以調用C函數。 我想要實現的內容如下: 我們想要調用的函數是foo1和foo2,它們具有不同類型的參數和返回值。
int foo1(int a) {
...
return intValue;
}
double foo2(char* str, double a) {
...
return dblValue;
}
在C端,呼叫等功能:
lua_returnValue returnValue1 = Do_Lua_Wrap(__FILE__, __LINE__, foo1, 1);
lua_returnValue returnValue2 = Do_Lua_Wrap(__FILE__, __LINE__, foo2, "string data", 1.2345);
在Do_Lua_Wrap,它將foo1和1傳遞到Lua函數,然後調用函數foo1像正常過程。 然後將foo2和一個char *以及一個double值傳遞給Lua函數,然後像正常進程那樣調用foo2函數。 在Lua函數中,它可以記錄有關FILE和LINE 的信息並寫入一些關於函數參數的額外日誌。
但我不知道如何編寫函數Do_Lua_Wrap在C和Lua中, 是否有可能?
如果可能,你能給我一些建議嗎?
你的回答非常棒! – sagasw