You should consider writing your own ‘dynamic array’ routines…
That’s what I did (I do not use MFC in all my programs so CArray wasn’t a solution) and it is pretty easy to do…
Here is the header I am using in DynamicArrays.h (I am sure you’ll figure out the source code easily !) :
////
// //
// Dynamic Arrays Classes Declaration //
// //
////
template <class ValueType> class C_Array1D
{
public:
bool m_bDeleteOnDestroy;
int m_iLo1,m_iHi1;
ValueType *m_pBuffer;
C_Array1D();
void Reset(void);
void Allocate(int iLo1,int iHi1);
void Clear(void);
void ClearPart(int iLo1,int iHi1);
void Delete(void);
void Set(ValueType v);
ValueType& operator()(int i1);
~C_Array1D();
};
template <class ValueType> class C_Array2D
{
public:
bool m_bDeleteOnDestroy;
int m_iLo1,m_iHi1;
int m_iLo2,m_iHi2;
ValueType *m_pBuffer;
C_Array2D();
void Reset(void);
void Allocate(int iLo1,int iHi1,int iLo2,int iHi2);
void Clear(void);
void ClearPart(int iLo1,int iHi1,int iLo2,int iHi2);
void Delete(void);
void Set(ValueType v);
ValueType& operator()(int i1,int i2);
C_Array1D<ValueType>& operator()(int i1);
~C_Array2D();
};
template <class ValueType> class C_Array3D
{
public:
bool m_bDeleteOnDestroy;
int m_iLo1,m_iHi1;
int m_iLo2,m_iHi2;
int m_iLo3,m_iHi3;
ValueType *m_pBuffer;
C_Array3D();
void Reset(void);
void Allocate(int iLo1,int iHi1,int iLo2,int iHi2,int iLo3,int iHi3);
void Clear(void);
void ClearPart(int iLo1,int iHi1,int iLo2,int iHi2,int iLo3,int iHi3);
void Delete(void);
void Set(ValueType v);
ValueType& operator()(int i1,int i2,int i3);
C_Array1D<ValueType>& operator()(int i1,int i2);
C_Array2D<ValueType>& operator()(int i1);
~C_Array3D();
};
//
/ Standard array types definitions /
//
typedef C_Array1D <bool> C_bool1D;
typedef C_Array1D <char> C_char1D;
typedef C_Array1D <short> C_short1D;
typedef C_Array1D <int> C_int1D;
typedef C_Array1D <long> C_long1D;
typedef C_Array1D <float> C_float1D;
typedef C_Array1D <double> C_double1D;
typedef C_Array2D <bool> C_bool2D;
typedef C_Array2D <char> C_char2D;
typedef C_Array2D <short> C_short2D;
typedef C_Array2D <int> C_int2D;
typedef C_Array2D <long> C_long2D;
typedef C_Array2D <float> C_float2D;
typedef C_Array2D <double> C_double2D;
typedef C_Array3D <bool> C_bool3D;
typedef C_Array3D <char> C_char3D;
typedef C_Array3D <short> C_short3D;
typedef C_Array3D <int> C_int3D;
typedef C_Array3D <long> C_long3D;
typedef C_Array3D <float> C_float3D;
typedef C_Array3D <double> C_double3D;
Of course, we could extend it to C_ArrayND but I haven’t had to use 4+ dimensions yet…
Regards.
Eric