C++ 为类中的泛型类型数据成员分配空值
我想给我的类中的数据成员分配某种类型的空值。对于int,我可以只使用0,但我不知道将使用的类型 这是我的类定义C++ 为类中的泛型类型数据成员分配空值,c++,class,generics,null,C++,Class,Generics,Null,我想给我的类中的数据成员分配某种类型的空值。对于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(nul
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;
}
}
};
模板
类循环缓冲区{
私人:
T arr[100]={};
int size=0;
第一,最后;
公众:
循环缓冲区(ints):大小,第一个(nullptr),最后一个(nullptr)
{}
T*增量(T*ptr){
如果(ptr==&arr[size-1])
返回&arr[0];
其他的
return++ptr;
}
无效写入(T数据){
if(first==nullptr){
arr[0]=数据;
第一个=最后一个=&arr[0];
}否则如果(增量(最后)=第一个){
抛出std::domain_错误(“必须使用overwrite()覆盖缓冲区中的最后一个值”);
}否则{
最后=增量(最后);
*最后=数据;
}
}
T read(){
if(first==nullptr){
抛出std::domain_错误(“缓冲区中没有值”);
}否则{
T数据=*第一;
*第一个=0;
如果(第一个==最后一个){
最后一个=第一个=空PTR;
}否则{
第一个=增量(第一个);
}
返回数据;
}
}
};
在read()的内部,我将*first赋值为零。有标准的方法吗?只有指针可以设置为
nullptr
。您只需使用类型自己的默认值,例如:
*first=T{};
如果这不是一个选项,那么将数组的元素类型定义为std::optional
,您可以将其设置为std::nullopt
,例如:
std::可选的arr[100];
...
T数据=(第一->具有_值())?第一->值():T{};
*first=std::nullopt;