是否可以在C中创建通用函数?

sda*_*das 5 c arrays generics

我正在重新使用C,但我已被其他语言的泛型所破坏.我在可调整大小的数组的实现中使用了以下代码:

typdef struct {
  void** array;
  int length;
  int capacity;
  size_t type_size;
} Vector;

void vector_add(Vector* v, void* entry) {
  // ... code for adding to the array and resizing
}

int main() {
  Vector* vector = vector_create(5, sizeof(int));
  vector_add(vector, 4); // This is erroneous...
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在我试图使这个泛型,我现在无法向向量添加一个整数而不将其存储在其他地方的内存中.

有没有办法让这项工作(既可以是原样,也可能是更好的仿制药方法)?

Jac*_*ack 7

对于我的回答,我假设您不熟悉内存部分(即使用内存池).

在我试图使这个泛型,我现在无法向向量添加一个整数而不将其存储在其他地方的内存中.

如果你想创建一个通用结构(就像你做的那样),那么你需要使用void指针.因此,从使用void指针开始,您需要将每个字段的值存储在内存池中,或者不常见地存储在堆栈中.注意,结构由void指针组成,因此只有内存地址包含在结构中,指向内存中值的其他位置.

如果在堆栈框架从调用堆栈中弹出,那么在堆栈上声明这些内存地址不被认为是有效的并因此可能被另一个堆栈帧使用(覆盖该内存地址集合中的现有值)时要小心.

另外:如果您迁移到C++,那么您可以考虑使用C++模板.