必须知道声明函数指针的结构偏移量
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 语言那样自动发生。
有什么方法可以像这样调用函数(在某处初始化):
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 语言那样自动发生。