如何接受指向具有任意数量参数的函数的指针作为 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 *
转换为指向适当结构类型的指针。
稍后当您调用散列函数时,填充适当结构的实例并将指向该结构的指针传递给函数。
我正在构建哈希图 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 *
转换为指向适当结构类型的指针。
稍后当您调用散列函数时,填充适当结构的实例并将指向该结构的指针传递给函数。