Здравствуйте, 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 можно обойтись?
Заранее спасибо.