c - 确定函数原型(prototype)

标签 c data-structures functional-programming function-pointers

我有以下 2 个数据结构:

struct data_type{
    char name[20]; 
    int (*check_equal)(void* a, void* b);
}

struct attr_data{
    int data_type; 
    void* (*get_func)(void* record); //Not sure about prototype of this function
}

第一个数据结构实际上是用于不同逻辑数据类型的结构,例如 string 和 int(short 和 int 的 c 数据类型属于“int”逻辑类型)。因此,我有一个 data_type 结构的数组,其中有 2 个元素:一个元素的名称为字符串,另一个元素的名称为整数。字符串的“check_equal”函数只是使用给定的参数 a 和 b 调用函数 strcmp(),这些参数被类型转换为 char*。 “整数”元素的 check_equal 函数的情况类似。但请注意,在此实现中,“check_equal”函数需要传递指向 2 个整数的指针。 第二个数据结构实际上是任何其他数据结构的元数据,例如:

struct abc{
    char* a;
    int b;
 }

对于 struct abc 中的每个成员变量,假设我在某个数组中维护 struct attr_data 的实例。理想情况下,某个成员变量的 get 函数应该始终返回该成员变量的值,而不是指向该成员变量的指针。因此,struct abc 中成员 a 的 get 函数应该返回 char*,但 b 的 get 函数应该返回 int。现在我需要使用这些 get_funcs 直接将参数传递给 struct data_type 的 check_equal 函数。但由于 check_equal 函数的原型(prototype)是 (void*,void*),因此使用 get_func 会失败。 谁能帮我决定这里使用的函数指针的原型(prototype)吗?有人可以帮助理解将 int 类型转换为 void* 背后的问题吗?

最佳答案

enum e{CHAR, INT, FLOAT, DOUBLE, CHARP, INTP, ......}

您可以使用这些数据类型作为引用,并使用 switch case 您可以对不同的数据类型执行所需的操作。

关于c - 确定函数原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490658/

相关文章:

c - 进程中锁定了多少内存

C realloc不改变字符数组的表观大小

Android:C 中的 usb hid 驱动程序

algorithm - 查找字符串中的所有字谜 O(n) 解决方案

php - 使用范围的表的适当数据结构

c - malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

php - 在数据库驱动的网站中使用图形、树和其他高级数据结构的一些示例有哪些?

javascript - 解决这类问题需要研究什么?

swift - 当 ElementOfResult 被推断为 Optional 时,flatMap 不会过滤掉 nil

python - 是否有等同于 python 的 functools.partial 的 C++