Re[4]: Шаблон для работы с массивом разных типов
От: glut  
Дата: 30.10.03 13:59
Оценка:
Здравствуйте, alexanderfedin, Вы писали:

>>>т.е. обойтись совсем без базового класса (тот, который оперирует PBYTE)?

>>>Тогда будет 15 классов (типов же 15), мне это не нравится =((

A>а у тебя настолько разные типы, с которыми нужно оперировать?


нет, просто я подумал что _DefaultTraits<int> и _DefaultTraits<char> это будет два разных типа, и соответственно TArrayBase<int, _DefaultTraits<int> > и СArrayСlass<char, _DefaultTraits<char> > будет тоже два разных класса и в итоге получится 15 (там int, char, short и т.п) классов.. Или я не прав? если не прав, то почему?

A>_Traits — это класс настройки на конкретные особенности типа, то есть здесь

A>он определяет операции по копированию и сравнению экземпляров.

A>В общем случае это будет

A>
A>template <typename _Ty>
A>struct _DefaultTraits
A>{
A>    static void copy(_Ty *dst, const _Ty &src) {SKIP}
A>    static bool compare(const _Ty &lhs, const _Ty &rhs) {SKIP}
A>};
A>

A>Для примитивных типов операции копирования и сравнения определены языком.
A>Для типа массива напиши что-то типа:
A>используй так:
A>[code]
A>template <typename _Ty, typename _Traits = _DefaultTraits>
A>class CArrayClass
A>{
A> friend class _Traits;

A> static void copy(_Ty *dst, const _Ty &src)

A> {
A> _Traits::copy(dst, src);
A> }

A> static bool compare(const _Ty &lhs, const _Ty &rhs)

A> {
A> return _Traits::compare(lhs, rhs);
A> }
A>};

А Почему _DefaultTraits без <> ? А разве CArrayClass<int> и CArrayClass<char> не сгенерят два разных класса?

A>если тебе нужна независимость класса CArrayClass от обрабатываемых типов,

A>тогда примени метафункции — будешь по-прежнему обходиться без накладных
A>расходов на вызов виртуальных функций, что с поддержкой компилятором inline
A>подстановки даст тебе быстродействие прямого использования необходимых
A>алгоритмов для соотвествующих типов.

Метафункции это кто?

Большое спасибо за все эти указания, но боюсь я все же тупой или просто чего-то другого не понимаю. Я был бы очень признателен если б мне показали, как TypeTraits и т.п. применить конкретно к моей задаче, т.е. код(определения классов) в котором есть класс c InitArray и RemoveItem и который умеет оперировать тремя описаными мной данными.

В моем решении, помимо виртуальных функций мне не нравится, что для того чтобы не делать 15 классов с RemoveItem и InitArray приходится оперировать PBYTE. Без PBYTE можно обойтись?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.