c - 在 C 函数中传递数据类型信息

标签 c data-structures generic-programming

我正在实现一个队列数据结构并使用 void * 指针使其通用。但我陷入了困境,如果在 C 中甚至可以像我们在 C++ 中拥有模板一样,我应该如何传递数据类型信息来获取特定数据类型的队列。

  typedef struct queue{void * data;
      struct queue * link;
  }Queue; 

  Queue * getQueue(pass the type){
      Queue * head = (Queue *)malloc(sizeof(Queue));
      //cast by type the data of queue and return created queue node.
      return head;
  }

使用C的malloc()函数创建队列。上面的代码创建了队列的头部。然后其他函数将根据插入请求创建后续节点。

这是错误的,但是我应该如何传递数据类型信息以使其正确转换,或者我是否必须使用 _Generic 宏,或者是否有一种工具可以通过 C 中的其他机制获取类型信息。

最佳答案

基本上你不能。 C 中没有“类型”变量类型允许您使用类型说明符标记内存区域,然后恢复它。

一般情况下不需要。您知道队列是一个整数队列或结构体员工,只需在调用代码中强制转换 void * 即可。仅当队列需要一组混合成员时才会出现问题。

最好的方法是向表示类型的队列节点结构添加一个字符串。然后在字符串上执行 if ... else 梯形并转换为正确的类型。它不是特别有效,但它使二进制数据易于人类阅读。然而,很少有这样的队列。

关于c - 在 C 函数中传递数据类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42083689/

相关文章:

c - XML 到 C 结构和 C 结构到 XML

c - 任何类型的一般排序,与结构作斗争

python - 如何通过第二个属性对已经排序的数组进行排序?

database - 数据库复制支持的数据结构设计

generics - 如何在 Haxe (haxe3) 中编写通用比较函数

c - 普通数组声明和在结构内声明的数组之间的内存和效率差异

c - 数组 a[i] 按降序打印,但我的逻辑是升序

c - 插入双向链表

c - Valgrind 错误和每个元素一个分配的通用列表

kernel - 通用 OpenCL 模板内核和主机