使用C + SWIG + 函数指针实现的假面向对象?

我正在尝试在 C 项目中创建一个面向对象、略带多态的接口,并使用 SWIG 将这样一个接口导出到 Lua(不幸的是,语言要求在短期内要相对固定)。以下是我想要为其生成包装器的接口示例:

这基本上是在纯 C 上模拟面向对象的多态性。我现在想使用 SWIG 从 Lua 中调用此结构的方法。到目前为止,我想到的最好的方法是这样的:

即使用 SWIG 的“成员函数”支持。然而,这会在开头添加一个额外的“self”引用,因此我必须在 Lua 中将“self”引用传递 两次

移除 SWIG 接口文件中的struct BaseObject *参数几乎可以工作,但会破坏生成的包装器,因为 SWIG 调用“成员函数”如下所示:

点赞
用户869951
用户869951

尝试一下:

typedef struct BaseObject {
  static int foo(struct BaseObject *self, int param);
} BaseObject;

将此翻译为中文并保留原始的 markdown 格式,显示如下:

typedef struct BaseObject {
  static int foo(struct BaseObject *self, int param);
} BaseObject;
2014-02-19 04:20:15