/** * @file dl_array_enum.h * @brief array使用枚举类作为索引的封装 * * * @version 1.0 * @author lveyou * @date 22-06-27 * * @note malloc不会调用构造函数 * @note 访问尾后指针是合法的 */ #pragma once #include namespace dl { //! 枚举类数组 template class ArrayEnum { public: using E = decltype(N); /** * @brief 返回位置元素,debug版本检查越界 */ V& operator[](E e) { #ifndef NDEBUG assert(CheckRange(e)); #endif return _data[(size_t)e]; } V& operator[](size_t index) { return operator[](E(index)); } //! 越界检查 bool CheckRange(E e) { return (size_t)e < (size_t)N; } size_t size() { return (size_t)N; } V* begin() { return _data; } V* end() { return _data + (size_t)N; } private: V _data[(size_t)N]; }; }