2013-04-26 123 views
2

我正在分析GIOchannel,glib的源代码。有人可以解释。有人可以解释“g_io_create_watch”定义在哪里吗?

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 

} 

上面的“THIS LINE”是什么意思? 我试图找出它指向哪个功能,但不明白。 函数在glib源代码的文件giochannel.c中。

在此先感谢。

+0

您的问题与标题完全不符。但是这行代码是调用一个函数指针;你应该检查'GIOChannel.funcs'的类型,然后查看该类型的'io_create_watch'成员。 – 2013-04-26 16:01:13

回答

2

库GIO使用techniches但写在普通C.

现在,给点面向对象:

  • channel:是一个指向GIOChannel对象。这很容易。
  • channel->funcs:是指向此GIOChannel对象的虚拟表的指针。即,指向函数的指针结构。这个想法是,可能有几个实现GIOChannel,他们每个人都有不同的功能表实现该特定的类。
  • channel->funcs->io_create_watch:是执行g_io_create_watch函数的那个​​对象。
  • return channel->funcs->io_create_watch (channel, condition):该表达式调用相关给定的虚函数并返回返回的值。

正如你所看到的公共功能g_io_create_watch只是将呼叫转发到相应的虚拟功能。这是必要的,因为在GObject中,虚拟函数永远不会被视为公共的,也就是说,客户端代码不应该直接调用它们。

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

0

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