必须知道声明函数指针的结构偏移量

Having to know the structure offset in which a function pointer is declared

有什么方法可以像这样调用函数(在某处初始化):

mystruct.foo();

允许foo()从内部访问mystruct结构。


我的目标是在 C 中使用一些面向对象的编程 并允许 foo 访问成员,mystruct 结构的一部分。

没有办法让它神奇地发生,我唯一能想到的就是这样做

#include <stdio.h>

#define DECLARE_CLASS_METHOD(class, name, ...) \
    (*name)(class *this, __VA_ARGS__)

typedef struct Class Class;
struct Class
{
    int DECLARE_CLASS_METHOD(Class, method, int value);
};

int
method(Class *this, int value)
{
    fprintf(stderr, "%p: %d\n", (void *) this, value);
    return 0;
}

int
main(void)
{
    Class instance;

    instance.method = method;
    instance.method(&instance, 9);

    return 0;
}

但是如您所见,您必须将实例传递给方法,它不会像 c++ 这样的 OO 语言那样自动发生。