C++ で未指定の型を取る循環バッファーを実装するように依頼されました。ジェネリック型はプリミティブ型であると想定しています。(または、非プリミティブ型を考慮する必要がありますか?) バッファーの場合、基本的な配列を使用しています。たとえば、T[]とnewおよびdeleteを使用して、初期化と破棄を行います。
バッファ クラスを実装し、予想される出力で整数に対してテストしました。しかし、それは動作しませんstd::string
。問題は、バッファーをポップするときに要素をゼロに設定してクリアすると、コンパイラーがそうすることがあいまいであると不平を言うことです。そのため、要素をクリアするための一般的な方法が必要であり、std::array
この機能がサポートされている可能性があると考えていましたが、ドキュメントで見つけることができません。
std::array または基本配列の要素をクリアする一般的な方法はありますか、それとも std::allocator が私の唯一のオプションですか? または、完全に間違った方向に進んでいる場合、 pop メソッドを実装して最初の要素をリセットし、フロント インデックスを次の要素のインデックスにインクリメントする方法を教えてください。
前もって感謝します!
それが役立つ場合、以下は私の関連コードです:
template<class T> T CircularBuffer<T>::pop_front()
{
if (_size == 0)
return 0;
T value = buffer[_front];
buffer[_front] = 0;
if (--_size == 0)
{
_front = -1;
_back = -1;
}
else
{
_front = (_front + 1) % _capacity;
}
return value;
}