Здравствуйте 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 тут никчему. Так что я не вижу никаких преимуществ этого метода.
Шаблоны тут используются всего лишь для "автоматизации приведения", для скрытия приведения.
А ведь шаблоны позволяют обойтись совсем без приведения. И позволяют работать с любыми типами.
Вот что главное!
Неужели Майерс?