模板是 C++ 的特性,但是如果您想要单链表或双链表的类型无关实现,可以借助宏来实现,或者您可以简单地void*在结构中存储指针。
当然,互联网上有很多这样的实现。@MohamedKALLEL和@hyde已经给出了来自 Linux 内核和 GLib 的示例,我只想添加一个关于漂亮的小库uthash 的注释。
它在 C 中实现了一个哈希表,但它也有一个utlist.h,它完全在宏上实现单链和双链(甚至循环)列表。也就是说,您可以简单地获取此文件,将其包含在内,然后按原样使用这些宏,或根据需要对其进行修改。同样不错的是,您可以将任何数据结构与它一起使用:它只需要有next指针(并且prev,在双向链接的情况下)。
Ps 但是在使用宏时要记住:能力越大责任越大。宏功能强大,但可能变得极其不安全和不可读。谨防!