のようなキューの実装があり、template <typename T> queue<T>
さまざまstruct QueueItem { T data;}
な場所(このキューを介した1つのプロデューサースレッドからコンシューマースレッドへのデータの通過を含む)間でデータの通過を計測する別のライブラリがあります。これを行うために、そのタイミングライブラリのコードをキューのプッシュ関数とポップ関数に挿入し、それらが割り当てるときに、そのライブラリのタイミングメタデータに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
できるだけ安く。これを行うための良い方法は何でしょうか?