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,它们具有不同类型的args和返回值.
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的信息,
并编写一些关于函数参数的额外日志.
但我不知道如何在C和Lua中编写函数Do_Lua_Wrap,这可能吗?
如果可能的话,你能给我一些建议吗?