Я создаю API хэш-карты. В этом API у меня есть функция hashmap_new()
, которая создает новую хэш-карту (действует как конструктор). Я хочу, чтобы пользователь мог указать возможность указывать указатель на свою собственную функцию ha sh в качестве аргумента для hashmap_new()
.
Проблема, с которой я столкнулся, заключается в том, что это определяемое пользователем ha sh функция может иметь любое количество аргументов, причем в любом порядке. Например: некоторые функции ha sh требуют только данные в качестве аргумента, некоторые требуют данных и длины, в то время как другие требуют данных, длины и начального числа.
Мой код выглядит примерно так:
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;
}
После установки функции ha sh для моей карты я хочу вызывать ее из других частей моего кода, где это необходимо. Как я могу написать функцию hashmap_new()
, которая принимает указатель на функцию ha sh, которая принимает любое количество аргументов, и как я могу вызвать эту функцию с таким количеством аргументов?