我想编写一个链表,可以让数据字段存储任何内置或用户定义类型.在C++中,我只使用模板,但如何在C中完成此操作?
我是否必须为我想要存储的每种数据类型重新编写链表结构及其一系列操作?联合会无法工作,因为它可以存储预定义的类型.
解决这个问题有不同的方法:
使用 datatype void*:这意味着您拥有指向未进一步指定类型的内存位置的指针。如果检索这样的指针,则可以显式说明其中的内容:*(int*)(mystruct->voidptr)告诉编译器:查看内存位置mystruct->voidptr并将内容解释为int.
另一件事可能是棘手的预处理器指令。然而,这通常是一个非常重要的问题:
编辑:对于预处理器技巧:
#include <stdio.h>
#define mytype(t) struct { t val; }
int main(int argc, char *argv[]) {
mytype(int) myint;
myint.val=6;
printf ("%d\n", myint.val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将是一个简单的类型包装器,但我认为它可能会变得相当复杂。