c - C中对象的函数指针

标签 c arrays object function-pointers

typedef struct node{
        int term;
        struct node *next;
}node;
typedef void(*PTR )(void *);
typedef void(*PTR1)(void *,int,int);
typedef int(*PTR2)(void *,int);
typedef void(*PTR3)(void *,int);
typedef void(*PTR4)(void *,void *,void *);

typedef struct list{
      node *front,*rear;
      PTR3 INSERT;
      PTR *MANY;
      PTR DISPLAY,SORT,READ;
      PTR4 MERGE;
}list;

void constructor(list **S)
{
    (*S)=calloc(1,sizeof(list));
    (*S)->front=(*S)->rear=NULL;
    (*S)->INSERT=push_with_value;
    (*S)->READ=read;
    (*S)->SORT=sort;
    (*S)->DISPLAY=display;    
    (*S)->MERGE=merger;    

    (*S)->MANY=calloc(2,sizeof(PTR));
    (*S)->MANY[1]=read; 


}
int main() 
{
    list *S1,*S2,*S3;
    constructor(&S1);
    constructor(&S2);
    constructor(&S3);

    S1->MANY[1](S1);
    S1->SORT(S1);
    S1->DISPLAY(S1);
    return 0;
}

所有此类函数中的 void * 参数在函数内部被类型转换为 list *。 有什么方法可以通过将 MANY[1] 更改为另一个名称(例如 READ_IT;)来调用 S1->READIT;

我打算创建一个通用头文件,以便我可以将它用于我的所有程序。 由于我不知道我需要多少个函数指针,所以我打算为每个函数指针类型创建一个动态数组。

最佳答案

typedef struct list{
  node *front,*rear;
  PTR3 INSERT;
  PTR READIT;
  PTR DISPLAY,SORT,READ;
  PTR4 MERGE;
}list;

...

(*S)->READIT = read;

...

S1->READIT(S1);

关于c - C中对象的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602250/

相关文章:

c++ - 如何在代码块 IDE 中获取控制台输出

c - 函数调用+计算返回值+比较C中的计算值

java - 如何在android中没有JSON对象值的情况下获取JSON数组值?是否可以?

javascript - 如何使用定制器_cloneDeepWith_并添加属性

javascript - 在挂载的生命周期中保存 Vuex 状态

c - 以两种不同方式指向动态库的函数指针

c - 在 C 语言中, "public"放在全局变量之前是什么意思?

java - 如何在 Java 中使用现有的 JButton 创建 JButton 数组?

ruby - 比较 ruby​​ 中的 2 个数组内容

c# - 如何在没有序列化工具的情况下将对象转换为 XML