Files
dl_old/dl/base/dl_array_enum.h
2025-09-20 17:51:25 +08:00

57 lines
823 B
C++

/**
* @file dl_array_enum.h
* @brief array使用枚举类作为索引的封装
*
*
* @version 1.0
* @author lveyou
* @date 22-06-27
*
* @note malloc不会调用构造函数
* @note 访问尾后指针是合法的
*/
#pragma once
#include <cassert>
namespace dl
{
//! 枚举类数组
template<typename V, auto N>
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];
};
}