我被要求在 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;
}