我在分析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文件中。
提前谢谢。
最佳答案
GIO库使用面向对象技术,但使用的是纯C语言。
现在,重点是:channel
:指向对象的指针那很容易。GIOChannel
:是指向此channel->funcs
对象的虚拟表的指针即指向函数的指针的结构其思想是可能有几个GIOChannel
的实现,每个实现都有一个实现该特定类的不同函数表。GIOChannel
:是该对象的channel->funcs->io_create_watch
函数的实现。g_io_create_watch
:此表达式调用相关的给定虚函数并返回返回值。
如您所见,public函数GIOChannel
只是将调用转发到相应的虚拟函数这是必要的,因为在GObject中,虚拟函数从不被认为是公共的,也就是说,客户机代码不应该直接调用它们。
要了解其工作原理,请查看其中一些函数的特定实现,例如,对于普通的Unix文件,请参见return channel->funcs->io_create_watch (channel, condition)
文件,特别是函数g_io_create_watch
和结构giounix.c
。
关于c - 有人可以解释“g_io_create_watch”定义在哪里吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16240602/