【发布时间】:2010-12-11 09:37:10
【问题描述】:
我想定义一个带有可交换哈希函数的哈希表。散列函数将采用指向散列表的指针和要散列的键,返回一个 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 放在任何一个顺序中都行不通。我必须在哈希表中使用长定义,然后再做一个 typedef,还是有更好的方法?
这一切都是用纯 C 语言设计的,而不是 C++ 语言。首选 ANSI C 解决方案!
【问题讨论】:
标签: c struct function-pointers circular-dependency