C函数调用struct内部而不使用相同的对象

时间:2014-02-12 16:07:10

标签: c function-calls

例如,我有以下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);

2 个答案:

答案 0 :(得分:4)

简短的回答是。你需要C ++。

答案 1 :(得分:4)

不。在C中,没有简单的方法可以做到这一点。 C ++提供了这个功能,它被称为方法。如果您要使用类实现自己的 C,那么在放弃之前,您将遇到语法噩梦。

一个好的C风格的对象函数方法将是将一个(主要是第一个)参数作为“self”(它是对被管理对象的引用)的函数的约定。 )。