其实吾不喜欢使用范型,因为这个特性很少用到.
有的时候,确实带来无比方便.比如说这里要实现起来,一下子就包括了所有类型.
之后还要改进的问题:
对于memset/memcpy之类的直接操作,如何处理?
重载+/-/++/--等操作符.还要计算移动.
对于多维情况,如何处理?
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; template <class TYPE> class SafeArray { public: SafeArray(const int size) { nSize = size; //new/delete pData = (TYPE*)malloc(sizeof(TYPE)*nSize); //memset(pData, 0, sizeof(int)*nSize); for (int i=0; i<nSize; i++) { pData[i] = i; } } ~SafeArray() { if (pData != NULL) { free(pData); pData = NULL; } } TYPE& operator[](int i) { if( i >= nSize ) { cout << "索引超过最大值" <<endl; // 返回第一个元素 return pData[0]; } return pData[i]; } private: TYPE* pData; int nSize; }; /** C++中声明办法: template <class TYPE> TYPE& SafeArray<TYPE>::operator[](int i) { if( i > nSize ) { GH_LOG_ERROR("out of array range! %d -> %d", nSize, i); // 返回第一个元素 return pData[0]; } return pData[i]; } */ int main() { int array_size = 8; SafeArray<int> test(array_size); cout << "test[2] 的值为 : " << test[2] <<endl; cout << "test[5] 的值为 : " << test[5] <<endl; //应该报错了 cout << "test[9] 的值为 : " << test[array_size+1] <<endl; return 0; }