Я хотел бы определить хеш-таблицу с заменяемой хеш-функцией.Хеш-функция будет принимать указатель на хеш-таблицу и ключ, который будет хешироваться, возвращая int следующим образом:
typedef int (hash_function_t) (hashtable *, int);
, где хеш-таблица хранит указатель на функцию, которая будет использоваться для хеширования ключей:
typedef struct ht {
size_t size;
...
hash_function_t *hash_function;
} hashtable;
К сожалению, это создает круговую ссылку.
Мне нужен указатель на хеш-таблицу в определении хеш-функции, чтобы я мог выполнить модуль для размера хеш-таблицы, чтобы он не превышал максимальное количество сегментов.Мне нужна хеш-функция в хеш-таблице, чтобы мне не приходилось передавать указатель хеш-функции повсеместно.
Я понимаю, что это приведет к коду вроде:
*ht->hash_function (ht, key)
что немного странно, но я в порядке с этим.
Поместить определения типов в любом порядке не работает.Нужно ли использовать длинное определение в хеш-таблице, а затем выполнить typedef позже, или есть лучший способ?
Это все предназначено для прямого C, а не C ++.Решения ANSI C предпочтительнее!