#pragma once #include "GdCPP_Exports.h" template class CStack { public: /// 构造函数指定预先分配的空间,和实际使用的数量 CStack(uint32_t maxnum = 0, uint32_t num = 0) : _Num(num) , _MaxNum(maxnum) , _Data(nullptr) { ASSERT(_MaxNum >= _Num); if (_MaxNum) { _Data = new T[_MaxNum]; } } ~CStack() { clearArray(); } /// 调整实际使用的数量 bool resizeCnt(uint32_t num) { ASSERT(_MaxNum >= num); if (_Num != num && num <= _MaxNum) { _Num = num; return true; } else { return false; } } // 调整预留空间 bool reserveCnt(uint32_t maxnum, bool useall = false) { if (maxnum > _MaxNum) { clearArray(); _MaxNum = maxnum; _Data = new T[_MaxNum]; if (_Data == nullptr) return false; if (useall) { _Num = _MaxNum; } } return true; } /// 重载[]操作符简化图像的引用,调用必须保证camid在[0, camNum-1]范围内 inline T& operator [](size_t id) { return _Data[id]; } inline const T& operator [](size_t id) const { return _Data[id]; } inline T& at(size_t id) { return _Data[id]; } inline const T& at(size_t id) const { return _Data[id]; } inline uint32_t Num() const { return _Num; } inline uint32_t MaxNum() const { return _MaxNum; } void clearArray() { delete[] _Data; _Data = nullptr; _MaxNum = 0; _Num = 0; } private: /// 禁用复制构造函数 CStack(const CStack& r); protected: /// 图形数组长度 uint32_t _Num; uint32_t _MaxNum; /// 动态分配的CImageBuf数组。数量没有使用宏CAM_MAX_NUM,因为CAM_MAX_NUM在不同应用可能发生变化。 /// 为了通用性不在构造时动态分配,camNum指定数量; /// 或者默认构造空数组,使用resize函数分配。 T* _Data=nullptr; };