【发布时间】:2017-06-14 14:08:49
【问题描述】:
作为一名进步的 C 程序员,我一直在研究哈希表。该表运行良好,高效(在一定程度上)且易于实现,但我遇到的一个问题是它只接受 const char * 作为值类型。我想实现一种方法来拥有其他数据类型,而不必为每种类型写出方法。这是因为我必须创建多个结构来保存每个数据,然后当然需要重写所有方法以匹配这些新结构,这会变得很长并且容易出错。
有更简单的方法吗?
编辑
要了解更多信息和示例,其中一种方法是 void InsertInto(Hash_Table DataBase, const char * key, const char * value); 这很有效,因为键始终是字符串名称,但值类型不能只是 char,我还需要它为 int、float 和 double,以使其对我的使用有效。而且截至目前,我有struct element { struct element * next, char * key, char * value }; 我也意识到这需要变得不同才能容纳所有类型。以答案为例,将不胜感激,但并非完全必要。
【问题讨论】:
-
C 没有一种适合所有人的类型。最多你可以编写你的表来保存
void*并提供回调,在适当地散列之前将其转换回具体类型。 -
使用宏来模拟模板。除非你喜欢调试,否则不要使用 void*。
-
以一种悲伤和不受欢迎的方式,切换到可以进行方法重载的 C++ 会更容易吗?因为作为附加背景,我正在尝试创建一种编程语言。 C 似乎是初学者 lang 开发人员的最佳选择,但 C++ 只是更好的选择?
-
好吧,你会使用模板。是的,这可能会更容易,但你也会学到更少。
-
您应该接受@2501 所说的“少学习”,使用带有一粒盐的模板。它远没有看起来那么简单,而且还有很多关于编写好的模板化容器的知识。