Re: Шаблон для работы с массивом разных типов
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 24.10.03 13:30
Оценка:
сделай:
template <typename _Ty, typename _Traits = DefaultTraits>
class CArrayClass
{
    friend class _Traits;
    ...

    static void copy(_Ty *pDst, const _Ty &src)
    {
        _Traits::copy(pDst, src);
    }

    static bool compare(const _Ty &lhs, const _Ty &rhs)
    {
        return _Traits::compare(lhs, rhs);
    }
};

никакой виртуальности, работает быстро.
typedef unsigned char* PBYTE;

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

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

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;}
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


Пожалуйста, расскажите как такую задачу спроектировать лучше?

Шаблон для работы с массивом разных типов Оценить
Posted via RSDN NNTP Server 1.8 beta
Respectfully,
Alexander Fedin.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.