如何创建支持类型参数的C++固定长度数组类?
解决方案:用C++类模板实现通用数值数组类
你需要用C++类模板来实现这个需求,这正是vector这类容器的核心实现逻辑,能让类支持任意指定的数据类型,同时无需重复编写多个类。
修改后的代码
#include <cstdint> // 引入uint8_t等固定宽度数值类型的定义 template <typename T> class SerialArray { private: unsigned long arrayLength; public: T* bufferArray; // 构造函数:初始化数组长度并分配内存 SerialArray(unsigned long arraySize) : arrayLength(arraySize) { bufferArray = new T[arrayLength]; } // 析构函数:释放堆内存(嵌入式环境必须添加,避免内存泄漏) ~SerialArray() { delete[] bufferArray; } // 禁用拷贝构造与赋值运算符(避免浅拷贝导致的重复内存释放) SerialArray(const SerialArray&) = delete; SerialArray& operator=(const SerialArray&) = delete; // 获取数组长度 unsigned long length() const { return arrayLength; } // 可修改的下标访问 T& operator[](unsigned long index) { // 嵌入式环境可按需添加越界检查(比如断言) return bufferArray[index]; } // 只读的下标访问 const T& operator[](unsigned long index) const { return bufferArray[index]; } };
使用示例
你可以像vector一样指定任意需要的数值类型:
// 创建不同类型的数组实例 SerialArray<uint8_t> u8Array(20); // 无符号8位整数数组 SerialArray<float> floatArray(15); // 单精度浮点数数组 SerialArray<long> longArray(10); // 长整数数组 // 像普通数组一样赋值和访问 u8Array[0] = 0xFF; floatArray[5] = 3.14f; unsigned long len = longArray.length();
关键说明
- 模板参数
T:替代了原代码中的固定int类型,可适配你需要的所有数值类型(uint8_t、int、double等) - 析构函数:嵌入式设备内存受限,必须手动释放堆内存,避免内存泄漏
- 禁用拷贝操作:默认的浅拷贝会导致多个对象指向同一块内存,析构时重复释放内存,因此显式禁用
- 下标运算符:让类的使用方式和普通数组完全一致,提升易用性
内容的提问来源于stack exchange,提问作者Jake quin
相关产品推荐
相关产品推荐

