我想将一些函数保存到哈希表中,键是整数(一些 id),值是函数(或地址?)。我的问题是,如何将它们存储在哈希表中,以便我可以按键获取函数?哈希表插入函数如下:
int ht_insert(ht_table *ht, void *key, size_t key_len, void *value, size_t value_len)
int func(void *){...}
我的代码是:
ht_insert(ht_tab, &myid, sizeof(myid), &func, sizeof(func));
而且效果不好。
------------------------------------下面有更多详细信息----------------
1.哈希表可以设置为COPY或REFERENCE模式,我选择COPY模式(key和value)。2.实际上我使用函数指针作为参数,我的原始帖子可能会混淆某些人。所以我在这里放了更多代码:
typedef int (*request_callback)(void *request); //typedef a function pointer
int add_callback_by_id(int id, request_callback cb)
{
...
ht_insert(ht_tab, &id, sizeof(id), cb, sizeof(request_callback));
...
}
//here, pointer of func is passed to add_callback_by_id
add_callback_by_id(request_id, &func);
//
if ((cb = ht_lookup(ht_tab, &id, sizeof(id))) != null)
{
....
(*(request_callback)cb)(request); //crashed here!
....
}
最后,我使用 user694733 的解决方案,通过定义一个包装结构。有用!
typedef struct _callback_obj
{
request_callback cb;
}callback_obj;
int add_callback_by_id(int id, request_callback cb)
{
callback_obj cb_obj;
...
cb_obj.cb = cb;
ht_insert(ht_tab, &id, sizeof(id), &cb_obj, sizeof(callback_obj));
...
}
//
if ((pcb_obj = ht_lookup(ht_tab, &id, sizeof(id))) != null)
{
....
(*(request_callback)pcb->cb)(request); //works, ^-^!
....
}
虽然有效,但不方便。