| Второй делитанский вопрос По специализации шаблонов.. | |
| От: | alexsy | ||
| Дата: | 28.05.08 07:41 |
| Выяснено что можно специализировать не весь клас а тока члены, члены функции и статические члены.. вот мой класс ( написан чисто для тестирования этого вопроса.. ) реализацию приводить не буду .. чисто то что интересует.
И так вопрос из объявления шаблона (template< typename Type, typename Sequence = std::vector< Type > > class CSortedArray |
| Re: Второй делитанский вопрос По специализации шаблонов.. | |
| От: | Bell | ||
| Дата: | 28.05.08 09:29 |
| Здравствуйте, alexsy, Вы писали: A>И так вопрос из объявления шаблона (template< typename Type, typename Sequence = std::vector< Type > > class CSortedArray В данном случае специализация не поможет, т.к. как ты и сам сказал, в специализированной функции нужно точно указывать тип контейнера (вернее, если есть желание писать специализацию для каждого контейнера — то вперед
ЗЫ Контейнеро-независимый код таит в себе много опасностей — обсуждалось это не раз, посмотри в поиске. ЗЗЫ Запись
в общем случае некорректна, т.к. у того же вектора итератор может быть обычным указателем. Правильнее вот так:
ЗЗЗЫ Для бинарного поиска можно использовать std::lower_bound Любите книгу — источник знаний (с) М.Горький |
| Re[2]: Второй делитанский вопрос По специализации шаблонов.. | |
| От: | alexsy | ||
| Дата: | 28.05.08 09:34 |
| Здравствуйте, Bell, Вы писали: B>Здравствуйте, alexsy, Вы писали: A>>И так вопрос из объявления шаблона (template< typename Type, typename Sequence = std::vector< Type > > class CSortedArray B>В данном случае специализация не поможет, т.к. как ты и сам сказал, в специализированной функции нужно точно указывать тип контейнера (вернее, если есть желание писать специализацию для каждого контейнера — то вперед B>
B>
B>ЗЫ B>Контейнеро-независимый код таит в себе много опасностей — обсуждалось это не раз, посмотри в поиске. Это поищем... B>ЗЗЫ B>Запись B>
B>в общем случае некорректна, т.к. у того же вектора итератор может быть обычным указателем. Правильнее вот так: B>
Учту.. B>ЗЗЗЫ B>Для бинарного поиска можно использовать std::lower_bound Да писалось не ради пробукта а ради практики .. |
| Re[2]: Второй делитанский вопрос По специализации шаблонов.. | |
| От: | Аноним 332 | ||
| Дата: | 28.05.08 14:38 |
| Здравствуйте, Bell, Вы писали: B>template< typename Type, typename Sequence > B>typename CSortedArray< Type, Sequence >::iterator B>CSortedArray< Type, Sequence >::find_position( char* f_Element ) B>{ B>//Реализация для char* B>} B>[/ccode] не удаётся компиляция если применено явное инстанцирование класса для типа int template class CSortedArray< int >;
../src/test_template_SortedArray2.cpp:111: error: invalid conversion from ‘int’ to ‘const char*’ ../src/test_template_SortedArray2.cpp:111: error: initializing argument 2 of ‘int strcmp(const char*, const char*)’ типа хочет она фукнцию с явным параметром за место шаблонного .. Без Яаного инстанцирования работает.. |
| Re: Второй делитанский вопрос По специализации шаблонов.. | |
| От: | Eugene Kilachkoff | ||
| Дата: | 28.05.08 15:13 |
| Здравствуйте, alexsy, Вы писали: A>
A>как переписать специалезированную функцию, так чтобы небыло зависимости от контейнера..? или это не возможно ? И надо писать специализацию для std::deque непример Я бы вообще ушел от специализированной функции, ровно также как делают в STL:
Слегка неудобно -- придется в местах инстанцирования прописывать какой-нибудь less_pchar типа
ps. strcmp можно еще заменить на std::char_traits::compare или как ее там.... |