Я пишу функцию порождения потока прототипа:
void Thread_create(void (*func)(void*), int argc, ...);
Я передал количество аргументов, поэтому нет проблем с определением длины.
Проблема в том, как мне переписать func в функцию с длиной argc, а затем вызвать ее, используя мои аргументы?
РЕДАКТИРОВАТЬ: я также ограничил функцию принимать только пустые * аргументы (то есть не нужно беспокоиться о том, чтобы передавался любой другой тип)
Например:
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.