Re[6]: Это не правильно!
От: Рек Россия  
Дата: 05.04.02 12:23
Оценка:
Здравствуйте konst, Вы писали:

K>почему не работает работает

K>не буду спорить на счёт чистоты стиля, конечно, нет никакой

K>вас интересовал инсёрт, вот, пожалуйста:


K>
K>BOOL TCollect::Insert(int i, const void *item)
K>{
K>    if( i == -1 ) i = Count();
K>    if( count == limit )
K>    {
K>        int newLimit = min(limit+delta, MaxCount());
K>        if( newLimit == count ) return error(IDS_SE_MANYITEMS, g_hInstanceNCall), FALSE;
K>        char *ni;
K>        if( ISNULL(ni=new char[newLimit*size_it]) ) return FALSE;
K>        if( count != 0 ) memcpy(ni, items, count*size_it);
K>        delete items; items = ni; limit = newLimit;
K>    }
K>    if( i < count )    memmove(items+(i+1)*size_it, items+i*size_it, (count-i)*size_it);
K>    count++;
K>    if( item ) memcpy(items+i*size_it, item, size_it);
K>    else memset(items+i*size_it, 0, size_it);
K>    return TRUE;
K>}

K>


K>его я не стал искажать — можно и ошибиться


K>и вы правы — вообще не для хранения объектов с деструктором и/или виртуальными функциями, а что делать идеальные решения не так часто встречаются


Да. Наверное ты прав и такого типа контейнер сможет работать с некоторыми типами.
(только с типами, допускающими побитовое копирование — это простые типы (int, double, указатели), и структуры из них).

А для чего такое ограничение? Что ты получаешь взамен? Сверх эффективную memcpy ?
Но ведь типы, допускающие побитовое копирование, как правило малы по размерам,
и сомнительное преимущество memcpy тут никчему. Так что я не вижу никаких преимуществ этого метода.

Шаблоны тут используются всего лишь для "автоматизации приведения", для скрытия приведения.
А ведь шаблоны позволяют обойтись совсем без приведения. И позволяют работать с любыми типами.
Вот что главное!

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