C 有人能解释一下;g“io”创建“手表”;定义是什么?

C 有人能解释一下;g“io”创建“手表”;定义是什么?,c,glib,C,Glib,我在分析GIOchannel,glib的源代码。有人能解释一下吗 GSource * g_io_create_watch (GIOChannel *channel,GIOCondition condition){ g_return_val_if_fail (channel != NULL, NULL); return channel->funcs->io_create_watch (channel, condition); //THIS LINE } “这条线”高

我在分析GIOchannel,glib的源代码。有人能解释一下吗

GSource * g_io_create_watch (GIOChannel   *channel,GIOCondition  condition){

  g_return_val_if_fail (channel != NULL, NULL);
  return channel->funcs->io_create_watch (channel, condition); //THIS LINE

}
“这条线”高于平均值? 我试图找出它指向哪个函数,但不明白。 该函数位于glib源代码的giochannel.c文件中


提前感谢。

它看起来像是返回一个指向GSource类型的指针,它看起来像是一个函数指针。

库GIO使用面向对象的技术,但用纯C编写

现在,直截了当地说:

  • channel
    :指向
    GIOChannel
    对象的指针。那很容易
  • channel->funcs
    :是指向此
    GIOChannel
    对象的虚拟表的指针。也就是说,指向函数的指针的结构。其思想是,
    GIOChannel
    可能有几个实现,每个实现都有一个不同的函数表来实现特定的类
  • channel->funcs->io_create_watch
    :是该
    GIOChannel
    对象的
    g_io_create_watch
    函数的实现
  • returnchannel->funcs->io\u create\u watch(channel,condition)
    :此表达式调用相关的给定虚拟函数并返回返回值
正如您所看到的,公共函数
g_io_create_watch
只是将调用转发到相应的虚拟函数。这是必要的,因为在GObject中,虚拟函数从不被视为公共函数,也就是说,客户端代码不应该直接调用它们


要了解其工作原理,请查看其中一些函数的具体实现,例如,对于普通Unix文件,请参阅
gionix.c
文件,特别是函数
g_io_channel_Unix_new
和struct
Unix_channel_funcs

您的问题与标题完全不匹配。但这行的作用是调用函数指针;您应该检查GIOChannel.funcs的类型,然后检查该类型的
io\u create\u watch
成员。