有什么好处是在C结构内的函数指针?(What good is a function pointer

2019-08-17 23:31发布

我猜使用函数指针的结构体里面有事情做了结构内封装功能...? 如果是这样,那么究竟是这样实现的?

而且它带来什么好事,有一个结构里面一个函数指针,而不是简单地定义功能?

Answer 1:

内部结构的函数指针是对象编程的C中的碱(见http://www.planetpdf.com/codecuts/pdfs/ooc.pdf )。 这是真的为中到大型C项目。

一个例子:

标题:

typedef struct TPile
{
    int(*Push)(struct TPile*, int);
    int(*Pop)(struct TPile*);
    void(*Clear)(struct TPile*);
    void(*Free)(struct TPile*);
    int(*Length)(struct TPile*);
    void(*View)(struct TPile*);

    int Nombre;

    struct Titem *Top;

} TPile ;

资源:

TPile TPile_Create()
{
    TPile This;
    TPile_Init(&This);
    This.Free = TPile_Free;

    return This;
}


TPile* New_TPile()
{
    TPile *This = malloc(sizeof(TPile));
    if(!This) return NULL;
    TPile_Init(This);
    This->Free = TPile_New_Free;

    return This;
}


void TPile_Clear(TPile *This)
{
    Titem *tmp;

    while(This->Top)

    {
      tmp = This->Top->prec;
      free(This->Top);
      This->Top = tmp;
    }

    This->Nombre = 0;
}


Answer 2:

有内部结构的函数指针将是某些数据结构非常有用,如二叉搜索树。

比方说,我想插入一个元素,它的结构是

struct Employee {
      int eid;
      char *name;
 };

成二叉搜索树。 但我想BST用我的功能,而存储和搜索的元素比较。

和BST结构将作如下。

 struct BST {
     struct _node *root;
     int (*compare)(void *e1 , void *e2);
 };

现在,如下我将使用BST。

  int main(void){
      struct Emp e1  = { 1, "John" };
      struct BST *t = create_tree();
      t->set_compare( &compare );

      t->insert(e1);


      t->get(e1);
       ...
  }

  int compare(void *e1 , void *e2)
  {
      //type cast e1, e2 as struct Emp 
      // return the comparison result based on id
  } 

优点我看到的是我不需要这个函数指针不断传进我的BST操作功能。

但里面存储结构的所有公共职能将带来OOP风格里面的C代码,像其他人说的话。



Answer 3:

假设函数取2个变量,并调用4种不同的功能。 让我们有一个结构如下:

/* Input 1                Input 2                 Function pointer
{
{ 0,                       0,                   Function00},
{ 0,                       1,                   Function01},
{ 1,                       0,                   Function10},
{ 1,                       1,                   Function11}
}

这将是很容易的输入值对结构值进行比较,并调用相应的功能。

这似乎是最好的if..else使用...但认为其中有要检查100多例这样的病例



Answer 4:

在结构中具有定义的函数指针的benifit,是相关的代码的设计。 我们的目标是让你的代码更有条理。

在一个结构限定的变量和函数是类似于面向对象的语言定义类

请参考以下链接了解更多详情



文章来源: What good is a function pointer inside a struct in c?