我有一个队列的实现,类似于template <typename T> queue<T>
a struct QueueItem { T data;}
,并且我有一个单独的库,用于计算数据在不同位置的传递(包括通过这个队列从一个生产者线程到消费者线程)。为了做到这一点,我将该计时库中的代码插入到队列的推送和弹出函数中,这样当他们分配 a 时,BufferItem.data
他们还分配了一个额外的成员,我添加的类型void*
为该库中的一些计时元数据。即曾经是这样的:
void push(T t)
{
QueueItem i;
i.data = t;
//insert i into queue
}
变成了
void push(T t)
{
QueueItem i;
i.data = t;
void* fox = timinglib.getMetadata();
i.timingInfo = fox;
//insert i into queue
}
QueueItem 从
struct QueueItem
{
T data;
}
到
struct QueueItem
{
T data;
void* timingInfo;
}
然而,我想要实现的是,当时序库未激活时,能够换出后一个结构以支持更轻量的结构。就像是:
if timingLib.isInactive()
;//use the smaller struct QueueItem
else
;//use the larger struct QueueItem
尽可能便宜。什么是这样做的好方法?