所以我有一个带有哨兵节点的通用双链队列结构:
// Queue node:
struct _QNode {
struct _QNode *prev; /* Previous list element. */
struct _QNode *next; /* Next list element. */
};
typedef struct _QNode QNode;
// Queue object:
struct _Queue {
QNode front; // sentinel node at the front of the queue
QNode rear; // sentinel node at the tail of the queue
};
还有一个“ duct-tape”结构,用于将整数值加载到队列节点中
struct _Tape {
int32_t payload; // user data field
QNode node; // generic node
};
还有一个包装类IntegerQueue,将两者结合在一起。
我的问题是,如何访问要弹出的给定节点的有效负载变量?
最佳答案
利用您所拥有的,您可以构建不错的QNode列表。但是,如果您有一个这样的QNode队列,则只能访问其中的QNode,而不能访问Tape,至少不能以可接受的方式访问(您可能会争辩说,每个QNode都包含在Tape结构中,因此减去了一些从QNode的地址获取值,以获取Tape-address,但是如果其他人看到了,它会被枪杀)。
因此,我认为您可以通过某种方式将有效负载放入QNodes中。如果要使用C ++,则可以使用模板以一种通用的方式进行操作,在这里可以使用宏,也可以在Queue中将一个空指针放入然后将其强制转换为有效负载类型(这又使您获得了成功)。