【发布时间】:2014-02-25 21:00:11
【问题描述】:
我正在用 c 语言开发一个线程池,我想让一个任务有任意数量的参数。甚至认为我可以使用像
这样的功能int (*task) ();
可以使用任何类型的参数调用此函数,例如我可以这样做
int fib(int n) { return n < 2 ? n : fib(n-1) + fib(n-2); }
...
task = fib;
printf("fib(10)=%d\n",task(10));
但是我想要的是能够保存参数以便以后运行它,而不必使用对 malloc 的调用,因为否则我宁愿只使用类似的任务
void * (*task) (void *);
我只需要将 void * 参数保存在结构上。 但是我想对任意参数执行此操作,是否可以为我想要的任何类型的函数自动生成它,甚至不使用任何 va_list。
有可能吗?
提前发送
【问题讨论】:
-
我能想到两种解决方案,但都涉及额外的结构或函数。
-
@GradyPlayer 这是一个解决方案的一部分,但你不能单独使用它来“保存”参数。
-
如果我使用 va_list 我会比只使用分配在堆栈上的结构更糟糕。 (甚至认为它们是宏,它们需要一个 for)
-
顺便说一句,在 c++ 中我认为这是可能的:cplusplus.com/articles/EhvU7k9E
标签: c asynchronous variadic-functions