【问题标题】:'Binding' Function Pointers on Load加载时的“绑定”函数指针
【发布时间】:2012-07-19 12:56:55
【问题描述】:

所以我一直在通过使用“类”结构和typedef'd '实例'结构制作一个简单的小堆栈来修补 C 中的面向对象。类结构简单地充满了对指向实例结构的指针进行操作的函数指针。当我第一次这样做时,我对自己说“我将在初始化实例结构时绑定指针!”你可能会猜到这不起作用,因为我的初始化函数实际上是一个还没有被赋值的指针。

(现在几乎是凌晨 5 点 - 比就寝时间更接近起床时间)

所以,我问是否有任何方法可以有效地绑定运行时的函数指针,这样我就不需要显式调用绑定它们的函数 - 我在想可能是 @987654321 的某种对应物@。

【问题讨论】:

  • GCC 的东西对我来说非常棒,但它不是可移植的。您提供的第二个链接绝对不可移植 XD(据我所知)
  • 谁不能将“类”结构声明为使用正确函数指针初始化的静态对象?
  • @vermiculus:查看此答案以获得可移植的解决方案!可能只有一个

标签: c function function-pointers


【解决方案1】:

如果'class'结构总是相同的,你可以静态初始化它:

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

这就是 Python C API 定义扩展类型的方式,例如。

【讨论】:

  • 即使功能尚未定义,我还能做到这一点吗?
  • @vermiculus 是的,只要在那个时候已经声明了函数,你就可以将函数指针指向它;链接器将确保函数指针采用正确的值。
猜你喜欢
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多