gpt4 book ai didi

c++ - 为类中的泛型数据成员分配空值

转载 作者:行者123 更新时间:2023-12-04 08:08:46 25 4
gpt4 key购买 nike

我想为类(class)中的数据成员分配某种空值。对于 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 赋值为零。有没有标准的方法来做到这一点?

最佳答案

只能将指针设置为 nullptr .您应该简单地使用类型自己的默认值,例如:

*first = T{};
如果这不是一个选项,则将数组的元素类型定义为 std::optional<T> ,您可以将其设置为 std::nullopt ,例如:
std::optional<T> arr [100];

...

T data = (first->has_value()) ? first->value() : T{};
*first = std::nullopt;

关于c++ - 为类中的泛型数据成员分配空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66084801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com