【发布时间】:2021-02-07 05:16:38
【问题描述】:
我想为班级中的数据成员分配某种空值。对于 int 我可以只使用 0 但我不知道将使用的类型。
这是我的类定义
template <typename T>
class circular_buffer {
private:
T arr [100] = {};
int size = 0;
T *first, *last;
public:
circular_buffer(int s) : size(s), first(nullptr), last(nullptr)
{}
T* increment(T* ptr) {
if (ptr == &arr[size-1])
return &arr[0];
else
return ++ptr;
}
void write(T data) {
if (first == nullptr) {
arr[0] = data;
first = last = &arr[0];
} else if (increment(last) == first) {
throw std::domain_error("Must use overwrite() to overwrite last value in buffer");
} else {
last = increment(last);
*last = data;
}
}
T read() {
if (first == nullptr) {
throw std::domain_error("No values in buffer");
} else {
T data = *first;
*first = 0;
if (first == last) {
last = first = nullptr;
} else {
first = increment(first);
}
return data;
}
}
};
在 read() 内部,我将 *first 赋值为零。有这样做的标准方法吗?
【问题讨论】: