我正在分析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中。
提前致谢。
答案 0 :(得分:2)
库GIO使用面向对象的技术,但用简单的C语言编写。
现在,重点:
channel
:是指向GIOChannel
对象的指针。这很容易。channel->funcs
:是指向此GIOChannel
对象的虚拟表的指针。也就是说,指向函数的指针结构。这个想法是可能有几个GIOChannel
的实现,每个实现都有一个不同的函数表来实现特定的类。channel->funcs->io_create_watch
:是g_io_create_watch
对象的GIOChannel
函数的实现。return channel->funcs->io_create_watch (channel, condition)
:此表达式调用相关的给定虚函数并返回返回的值。正如您所看到的,公共函数g_io_create_watch
只是将调用转发给相应的虚函数。这是必要的,因为在GObject中虚拟函数永远不会被认为是公共的,也就是说,客户端代码永远不应该直接调用它们。
要了解它如何工作,看看到的一些的这些功能的特定实现中,例如,对于普通Unix文件,查看giounix.c
文件,特别是功能g_io_channel_unix_new
,并且struct unix_channel_funcs
。
答案 1 :(得分:0)
它看起来像是返回一个指向GSource类型的指针,它看起来是一个函数指针。