gpt4 book ai didi

C - 将带有参数的函数传递给包装器执行器

转载 作者:太空狗 更新时间:2023-10-29 15:23:43 24 4
gpt4 key购买 nike

有没有一种方法可以在 C 中构建一个包装函数,如下所示:

void wrapper(void *func) {
// Set up
func([same arguments as func was passed in with]);
// Clean up
}

void foo(int x, int y);
void bar(char *z);

wrapper(foo(1, 2));
wrapper(bar("Hello"));

似乎您必须在 wrapper 中传递参数,或者只支持 func 的一种类型的方法头。我一直在写很多 Javascript……当然这在 JS 中是可能的。

最佳答案

这是我能想到的最好的可变函数 wwrappers:

#include <stdio.h>
#include <stdarg.h>

void wrapper(void (*func)(va_list), ...) {
va_list args;
va_start(args, func);

func(args);

va_end(args);
}

void foo(int x, int y)
{
printf("foo(%d,%d)\n", x, y);
}
void vfoo(va_list args)
{
foo(va_arg(args, int), va_arg(args, int));
}
void bar(char *z)
{
printf("bar(%s)\n", z);
}
void vbar(va_list args)
{
bar(va_arg(args, char*));
}

int main()
{
wrapper(vfoo, 1, 2);
wrapper(vbar, "Hello, World!");
return 0;
}

Live example on Coliru .

关于C - 将带有参数的函数传递给包装器执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com