我现在正在用 C 编写我的硬件,我们在讲座中获得了下面的代码来创建泛型类型。在 C++ 中,我知道您可以通过使用模板来实现这一点。我们的导师希望我们使用这些(所以我现在不认为没有 void*)。 但是,我对如何声明这一点感到困惑。
typedef struct Cell(x) *List(x);
struct Cell(x) {
x* data;
List(x) next;
};
所以,我知道每当编译器看到 列表(x), 它将替代 struct Cell(x),所以我尝试做 List(int) a;在 main() 中,但这不起作用
最佳答案
C 的新版本添加了“类型泛型表达式”,例如允许 abs
函数对不同的参数类型执行不同的操作。
但据我所知,目前还没有通用类型。您对实现集合类型的选择:
- 放弃类型安全,使用
void*
- 键入每种元素类型的集合/容器代码。
- 使用宏生成与 #2 相同的代码。
我怀疑您打算执行#3。类似的东西:
#define Cell(x) specialized_##x##_Cell
#define List(x) specialized_##x##_List
#define SINGLY_LINKED_LIST(x) \\
typedef struct Cell(x) *List(x); \\
struct Cell(x) \\
{ \\
x* data; \\
List(x) next; \\
};
然后你就可以像这样使用它了
SINGLY_LINKED_LIST(int)
int main(void)
{
List(int) a;
}
关于在 C 中使用 typedef 创建泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26832279/