繁体   English   中英

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

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

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

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

我的代码看起来像这样:

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;
}

在为我的 map 设置 hash function 后,我想在需要的地方从代码的其他部分调用它。 How can I write hashmap_new() function that accepts a pointer to hash function that accepts any number of arguments and how can i call that function with that many number of arguments?

声明您的 hash 函数以采用单个void *参数。 然后对于每个 function,定义一个结构,其中包含该 hash 的参数,并在 function 内部将void *转换为指向相应结构的指针。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM