天天看点

读boost::multi_array有感,多维数组实现(非类型模板,偏特化)

开发环境:
VS2002(VC7)

本文做如下简化:
 1,假定所有维元素都是5。

 2,不考虑const的[]。

 3,由于只是熟悉原理,不考虑各种异常情况。


 问题一,请实现一个一维整形数组,只需重载[]。

 问题二,请实现一个二维整形数组,只需重载[]。

 源码如下:

 class CIntArray1

 {

 public:    

     int& operator[](int index)

     {

         return m_pData[index];

     }

 protected:

     int m_pData[5];


 };


 class CIntArray2

 {

 public:

     int* operator[](int index)

     {

         return m_pData[index];

     }

 protected:

     int m_pData[5][5] ;

 };

 测试程序:

     CIntArray1 arr1;

     arr1[1] = -1;

     int i1 = arr1[1];


     CIntArray2 arr2;

     arr2[1][1] = -2;

     int i2 = arr2[1][1];

 三,请实现一个N(2<=n<=10)维整形数组,只需重载[]

 template<int iWeiShu>

 class CIntArray

 {

 public:

     CIntArray<iWeiShu-1>& operator[](int index)

     {

         return m_pData[index];

     }

 protected:

     CIntArray<iWeiShu-1> m_pData[5];

 };


 template<>

 class CIntArray<1>

 {

 public:

     int& operator[](int index)

     {

         return m_pData[index];

     }

 protected:

     int m_pData[5];

 };

 测试程序

 CIntArray<1> a1;

     a1[1] = 4;

     int x1 = a1[1];


     CIntArray<2> a2;

     a2[1][1] = 5;

     int x2 = a2[1][1];


     CIntArray<3> a3;

     a3[0][0][0] =9;

     int x3 = a3[0][0][0];