在c中有一种非常简单的方法来包装函数(用于计时/记录/等) 用宏
#define WRAP(func,args) \
...
func args /*call function with args num of args irrelavent*/ \
...
WRAP(some_func,(arga_a,arg_b)) 因为它扩展到“func(args)”
但最终你厌倦了宏的缺点。
有没有办法以函数指针的方式以简单的方式执行此操作?重要的是,它适用于具有任意数量参数的函数(如果它支持0-6个参数,我们可以说少于7个。并且不更改函数。
答案 0 :(得分:2)
在C中,没有。无法声明或调用“任意”函数指针(即具有任意原型的指针)。
你能做的最好的就是使用可变函数。
答案 1 :(得分:1)
我认为你不能拥有可变参数函数指针。 一个可能的解决方案是使用一个函数指针,它带有一个“cookie”参数,您可以使用该参数传递具有所有必需字段的自己的结构。
原型如下:
void (myFunc*)(void * cookieP);
但是这有一个缺点,就是松开函数参数的输入,你需要转换参数......
答案 2 :(得分:1)
看起来类似于this question:继续使用MACROS,或者通过结构传递所有额外的args(从而将您的函数转换为“方法”)
答案 3 :(得分:0)
好老void*
怎么样?
#include<stdio.h>
int bla(int a){ //some random function
return a+1;
}
int main(){
void* ptr; //void* aka universal pointer
int lol; //result goes here
ptr = &bla; //pointer to function
//return_value = ( (cast_to_function_type) (pointer_to_function) ) (argument_or_arguments);
lol = ( (int(*)(int)) (ptr) ) (1);
printf("%d\n", lol); //print the result
return 0;
}