我正在实现一个队列数据结构,并使用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中的其他机制获取类型信息。
答案 0 :(得分:2)
基本上你不能。 C中没有“类型”变量类型,允许您使用类型说明符标记内存区域,然后将其恢复。
通常不需要。您知道队列是整数或结构雇员的队列,只是在调用代码中强制转换void *。只有当队列需要一组混合成员时才会出现问题。
最好的方法是在表示类型的队列节点结构中添加一个字符串。然后在字符串上执行if ... else梯形图并转换为正确的类型。它不是特别有效,但它使二进制数据具有人类可读性。然而,很少有队列是这样的。
答案 1 :(得分:1)
试试这个:
android:supportsRtl="false"
答案 2 :(得分:1)
在你的情况下不需要任何技巧。无需担心任何类型的通用性。您正在实现存储void指针的队列。空队列将由NULL表示。函数addElement
将添加一个指向队列的void指针。就这些。实现可能如下所示:
typedef struct queue {
void * data;
struct queue * link;
} Queue;
Queue * getQueue() {return(NULL);}
void addElement(Queue **qq, void *data) {
// find last ptr
for(; *qq != NULL; qq = &((*qq)->link) ) ;
*qq = malloc(sizeof(Queue));
(*qq)->data = data;
(*qq)->link = NULL;
}