在 C 中使用 typedef 创建泛型

标签 c pointers generics types typedef

我现在正在用 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 函数对不同的参数类型执行不同的操作。

但据我所知,目前还没有通用类型。您对实现集合类型的选择:

  1. 放弃类型安全,使用void*
  2. 键入每种元素类型的集合/容器代码。
  3. 使用宏生成与 #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/

相关文章:

c - win32 - 如何将屏幕捕获为 8 位或 16 位位图?

c - 如何将一个数组的变量值赋给另一个变量?

c++ - 什么是 "pch.h"以及为什么需要将它作为第一个头文件包含在内?

java - 将泛型类型求和为 double

typescript - 可以省略 Typescript 类上的泛型类型

c# - 有没有更好的方法来实现一个可继承的方法,该方法返回一个继承自该类类型的对象?

c - 帮助在 Xcode 上用 C 语言打开文件

google-app-engine - 使用反射将数据从序列化动态转换回 Go 结构

C语言编程调用函数

c++ - 在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast