c - 函数指针模拟方法在 C 中有害吗?

标签 c methods function-pointers

<分区>

我知道我可以在 C 中使用函数指针来模拟这样的方法:

typedef struct a
{
    int x, y;
    int (*add)(int x, int y);
}a;

int add(int x, int y)
{
    return x + y;
}

int main()
{
    a b = {2, 3, &add};
    printf("%d\n", b.add(b.x, b.y));
    return 0;
}

但是这种 C 语言的形式不好吗?我应该找到其他方法来做到这一点吗?如果这不好,我应该做什么而不是这个?显然,当我使用它时,它不会像本例中那样用于微不足道的功能。

最佳答案

还不错C; Linux 充满了这样的代码

目前尚不清楚这种风格是否能为您带来任何有值(value)的东西,因此将答案留给个人品味、审美等。

但是我想提一件事:如果你真的想模拟方法,你必须从模拟“this”指针开始。这就是方法(或一般的封装)的全部意义所在——它们可以访问结构的内部。

因此你的代码应该是这样的:

typedef struct a
{
    int x, y;
    int (*add)(struct a* this, int x, int y);
} a;

和:

printf("%d\n", b.add(&b, b.x, b.y));

关于c - 函数指针模拟方法在 C 中有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27414740/

相关文章:

c++推导函数指针类型

c - fseek 传递负偏移量和 SEEK_CUR

pointers - Setter 方法不设置结构属性 Golang

c++ - 通过来自另一个翻译单元的指针调用具有内部链接的函数

c++传递成员函数

java - 您可以在方法中使用无限的自定义对象吗?

c++ - 如何在树莓派上的 Arm 组装中获取纪元时间并将其转换为本地时间?

c - c中的段错误strcmp

c - 将文件中的数据保存到数组中

java - println 怎么可能在 void 方法中工作?