例如,我有以下C代码:
#include <stdio.h>
#include <stdlib.h>
struct a
{
void(*fun)(struct a *);
int x;
};
void fun(struct a *st)
{
++st->x;
}
struct a *new_a()
{
struct a *v = (struct a*)malloc(sizeof(struct a));
v->fun = fun;
return v;
};
int main()
{
struct a *v = new_a();
v->x = 5;
v->fun(v);
printf("%d\n", v->x);
}
这打印当然是6
但是,有没有办法让函数调用依赖于使用相同的结构来调用它:v->fun();
,而不是v->fun(v);
?
答案 0 :(得分:4)
简短的回答是否。你需要C ++。
答案 1 :(得分:4)
不。在C中,没有简单的方法可以做到这一点。 C ++提供了这个功能,它被称为方法。如果您要使用类实现自己的 C,那么在放弃之前,您将遇到语法噩梦。
一个好的C风格的对象函数方法将是将一个(主要是第一个)参数作为“self”(它是对被管理对象的引用)的函数的约定。 )。