2012-07-20 64 views
0

所以我一直在C中通过使用'class'结构和一个简单的小堆栈来调试C中的对象定向。'd'实例'结构。这个类的结构只是充满了指向实例结构指针的函数指针。当我第一次遇到它时,我对自己说:“当我初始化实例结构体时,我只会绑定指针!”你可能会猜想这不起作用,因为我的初始化函数实际上是一个还没有被赋值的指针。加载'Binding'函数指针

(这是目前几乎早上5点 - 接近唤醒时间比睡觉)

所以,我问是否有什么办法可以有效结合的函数指针在运行时,因为我并不需要明确调用绑定它们的函数 - 我想也许是某种对象atexit

+1

看看http://stackoverflow.com/q/5222008/365188或http://stackoverflow.com/q/4880966/365188是你在找什么 – 2012-07-20 09:02:18

+0

海湾合作委员会的事情对我来说很棒*但它不是便携式的。您提供的第二个链接是*绝对*不便携式XD(从我所知道的) – 2012-07-20 09:21:48

+1

谁不能仅仅将“类”结构声明为使用正确函数指针初始化的静态对象? – dpi 2012-07-20 09:24:37

回答

2

如果“类”结构始终是相同的,你可以静态初始化它:

void do_x_to_instance(instance *); 
struct class_type { 
    void (*do_x)(instance *); 
    ... 
} myclass = { 
    &do_x_to_instance, 
    ... 
}; 

这是Python C API是如何工作的定义扩展类型,例如。

+0

即使功能还没有定义,我仍然可以做到这一点吗? – 2012-07-21 07:58:26

+0

@vermiculus是的,只要函数已经在那个时候声明了,你就可以得到一个指向它的函数指针;链接器将确保函数指针采用正确的值。 – ecatmur 2012-07-22 21:17:40