如何接受指向具有任意数量参数的函数的指针作为 C 中的参数并调用它?

How to accept pointer to a function with any number of parameters, as a parameter in C and call it?

我正在构建哈希图 API。在那个 API 中,我有一个 hashmap_new() 函数来创建一个新的 hashmap(就像一个构造函数)。我希望用户能够指定能够提供指向他们自己的哈希函数的指针作为 hashmap_new().

的参数

我面临的问题是这个用户定义的散列函数可以有任意数量的参数,并且也可以以任意顺序排列。例如:一些散列函数只需要数据作为参数,一些需要数据和长度,而另一些需要数据、长度和种子。

我的代码看起来像这样:

struct hashmap *hashmap_new(int capacity, uint64_t (*hash_fn)(const void *key, uint64_t len))
{
  ... // code for allocation and setting other variables
  map->hash_fn = hash_fn;

  return map;
}

为地图设置哈希函数后,我想在需要时从代码的其他部分调用它。我如何编写 hashmap_new() 函数来接受指向接受任意数量参数的哈希函数的指针,以及如何使用那么多参数调用该函数?

声明您的散列函数采用单个 void * 参数。然后为每个函数定义一个包含该散列参数的结构,并在函数内部将 void * 转换为指向适当结构类型的指针。

稍后当您调用散列函数时,填充适当结构的实例并将指向该结构的指针传递给函数。