【发布时间】:2011-04-09 10:01:09
【问题描述】:
我正在编写原型的线程生成函数:
void Thread_create(void (*func)(void*), int argc, ...);
我已经传入了参数计数,所以确定长度没有问题。 问题是如何将 func 重新转换为具有 argc 长度的函数,然后使用我拥有的参数调用它?
编辑:我还限制函数只接受 void* 参数(即无需担心传入任何其他类型)
例如:
void foo(void *bar, void *baz);
void fooTwo(void *bar, void *baz, void *bam);
int main(int argc, char *argv[]){
Thread_create(&foo, 2, (void*)argv[0], (void*)argv[1]); //foo gets called in a new thread with the arguments: argv[0] and argv[1]
Thread_create(&fooTwo, 3, (void*)argv[0], (void*)argv[1], (void*)argv[2]); //fooTwo gets called in a new thread with the arguments: argv[0] and argv[1] and argv[2]
return 0;
}
旁注:形式的解决方案
Thread_create(void (*func)(void*), int argc, ...); //call with 1 arg
Thread_create(void (*func)(void*, void*), int argc, ...); //call with 2 args
Thread_create(void (*func)(void*, void*, void*), int argc, ...); //call with 3 args
不起作用,因为我无法通过线程创建库调用传递该信息,无论它可能是 pthread_create 还是 windows ThreadCreate 函数。
【问题讨论】:
-
我不太明白。你是说你有一个指向一个函数的指针,这个函数需要固定数量的参数?你能举例说明你想做什么吗?
-
另外,您能否决定您对 C 还是 C++ 感兴趣?解决方案可能会大不相同。
标签: c variadic-functions