Re: Шаблон для работы с массивом разных типов
От: glut  
Дата: 24.10.03 10:16
Оценка:
Исправил/Дополнил...

typedef unsigned char* PBYTE;

class CArrayBase
{
protected:
   CArrayBase();   
   virtual ~CArrayBase;

public:
   void InitArray ( int NumItems, PBYTE* pArray ); // создает массив
   void RemoveItem( PBYTE Item ); // удалить элемент массива со значением Item

protected:
   virtual void CopyItem(PBYTE* pdst, PBYTE src) {};
   virtual BOOL CompareItems(PBYTE item1, PBYTE item2) {return TRUE;};

   PBYTE* m_pArray;

   int m_TypeSize; // реальный размер того что передается через PBYTE 
                   // в моей реальной задаче это в любом случае надо, для других целей..
};  


template <class TYPE, int TYPE_SIZE>
class TArrayPointer: public CArrayBase // темплейт для ряботы с указателями (STR255 и RECT*)
{
public:
   CArrayBase() {m_TypeSize=TYPE_SIZE;}

   void InitArray ( int NumItems, TYPE* pArray )
      { CArrayBase::RemoveItem((PBYTE*) pArray); }
   void RemoveItem( TYPE Item ); 
      { CArrayBase::RemoveItem((PBYTE) Item);

protected:
   virtual void CopyItem(PBYTE* pdst, PBYTE src) 
      { **((TYPE*)pdst)=*(*(TYPE*)&src) };
   virtual BOOL CompareItems(PBYTE item1, PBYTE item2) 
      { return _strnicmp((LPCSTR)item1,(LPCSTR)item2,__TYPE_SIZE); };
};

// ну и по такому же принципу темплэйт TArrayValue для работы с UINT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.