有没有一种解决方法可以将函数指针类型转换为 C 中的对象指针?

问题描述 投票:0回答:1

我有一个名为“bench”的函数,它接受一个返回 void 指针的函数指针(对于泛型)。

static inline unsigned long bench(void* (*funcPtr)(va_list), ...)

但是如果我向它传递一个返回其他任何内容的函数,我会收到此错误 -

passing argument 1 of 'bench' from incompatible pointer type

所以它完全拒绝类型转换。但是,如果我在调用基准函数时手动将其转换为 void 指针,则会收到此错误 -

ISO C forbids passing argument 1 of 'bench' between function pointer and 'void *'

我知道的一个解决方法是使用返回 void 指针的包装函数,但随后我必须为我需要传递的每个单独函数创建一个新的包装函数,这将非常低效,反之亦然就是为我将使用的每种数据类型创建一个包装函数,这并不是那么低效,但确实如此。有更好的解决办法吗?

c pointers function-pointers void-pointers
1个回答
0
投票

C 没有通用的函数指针类型,就像

void *
用于对象一样。但是,您可以将任何函数指针转换为任何其他函数指针类型。因此,要将函数
foo
传递给
bench
,可以将其转换为
bench
的参数类型:

bench((void *) (*)(va_list)) foo);

虽然这可以转换和传递指针,但调用函数依赖于通过正确的类型调用它(根据函数调用规则匹配其声明的东西)。

© www.soinside.com 2019 - 2024. All rights reserved.