c - 在 C 中实现函数重载的最佳方法是什么?

标签 c function polymorphism overloading

我目前正在编写一个头文件 data_structures.h,其中包含几种不同的数据结构,例如动态数组和树。我的问题是,我想要一个像 get_element() 这样的函数,它可以用动态数组或树或任何其他数据结构的实例调用。

我知道 C 中没有函数重载这样的东西,但是有什么最佳实践方法可以解决这个问题吗?是否最好为每个数据结构使用另一个函数名称,例如 tree_get_element()

int get_element(struct dynarray *a, int index);
int get_element(struct tree *t, int index);

最佳答案

Would it be best to just have another function name for each data structure, for example tree_get_element()?

是的,这是在 C 中通常完成的方式。

但如果您使用的是 C11 编译器,则可以使用泛型表达式对其进行扩展:

int dynarray_get_element(struct dynarray *a, int index);
int tree_get_element(struct tree *t, int index);

#define get_element(x, index)                   \
    _Generic((x),                               \
        struct dynarray *: dynarray_get_element,\
        struct tree *    : tree_get_element     \
    )((x), (index))

关于c - 在 C 中实现函数重载的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58644711/

相关文章:

C++ 函数重写

c - 如何通过 BLE 发送 float 据并在 UART 上正确显示(nRF 工具箱)

c - 高斯积分和二分法

string - Oracle PL/SQL - 字符串匹配和删除函数

javascript - 创建一个函数,该函数返回一个数组,其中包含从 5 到 118 的所有奇数

java - 根据条件创建不同的 POJO 子对象,但共享公共(public)字段

c++ - openMP 新手,有什么建议可以将以下代码与 openMP 并行吗?

c - 仅增加/减少变量时是否需要互斥锁?

java - 这条语句的返回值是多少

perl - 如何使用 Test::More 和 friend 来自动测试继承的行为?