小编Osa*_*afa的帖子

有没有办法传递带泛型参数的函数指针?

我正在实现一个通用的单链表,其中列表节点存储指向其数据的指针.

typedef struct sll_node
{   
    void *data;
    struct sll_node *next;
} sll_node;
Run Code Online (Sandbox Code Playgroud)

为了实现一个适用于任何类型数据的通用查找子例程,我编写了它,以便它将一个函数指针作为参数作为参数,如下所示:

/* eq() must take 2 arguments. ex: strcmp(char *, char *) */
sll_node *sll_find(void *data, int (*eq)(), sll_node *root);
Run Code Online (Sandbox Code Playgroud)

您可以传递适用于手头数据类型的函数指针.因此,如果在列表节点中存储字符串,则可以将strcmp作为eq()函数传递,依此类推.它有效,但我仍然不满意..

有没有办法明确指定比较函数参数的数量而不放弃它的一般性?

我一开始尝试了这个:

sll_node *sll_find(void *data, int (*eq)(void *, void *), sll_node *root);
Run Code Online (Sandbox Code Playgroud)

我希望它能起作用.但是没有(编辑:它编译了一个警告,但我有 - 错误!),我不得不围绕strcmp编写一个包装函数,使其符合eq原型.

然后我尝试了:

sll_node *sll_find(void *data, int (*eq)(a, b), sll_node *root);
Run Code Online (Sandbox Code Playgroud)

要么:

typedef int (*equality_fn)(a, b);
sll_node *sll_find(void *data, equality_fn eq, sll_node *root);
Run Code Online (Sandbox Code Playgroud)

这两个都不会编译,因为:"只有函数定义才允许没有类型的参数列表"

c function-pointers

6
推荐指数
1
解决办法
1044
查看次数

标签 统计

c ×1

function-pointers ×1