Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Шаблоны
 
 автор: bronenos   (08.04.2007 в 11:42)   письмо автору
 
 

Четыре раза читал про шаблоны в книге Бьерна Страуструпа про шаблоны
Никак не могу понять этих строк... template<class C> и все что с ними связано
зачем, почему, для чего... не понимаю...
объясните кто может :(

  Ответить  
 
 автор: oleg_alexeev   (08.04.2007 в 12:56)   письмо автору
 
   для: bronenos   (08.04.2007 в 11:42)
 

>> зачем, почему, для чего...

Зачем и для чего - это на самом деле один вопрос. И Страуструп на него вполне нормально отвечает в самом начале главы о шаблонах - чтобы иметь возможность написать алгоритм один раз, не переписывая его каждый раз для нового типа данных. Например, написал я алгоритм сортировки для целых чисел. Если потом мне надо будет сортировать вещественные числа, мне придется создать копию этой функции, заменив тип int на double. При использовании механизма шаблонов я могу тело функции написать только один раз, а компилятор мне сгенерирует нужный код для разных типов данных.

Вопрос почему? не корректен. Почему кошку назвали кошкой? :-)
Хотя, наверное, на него можно ответить так: шаблоны пришлость придумать потому, что С++ строго типизированный язык - в функцию, принимающую в качестве параметра тип int не подставишь double. С помощю шаблонов такое ограничение можно преодолеть.

  Ответить  
 
 автор: bronenos   (09.04.2007 в 12:03)   письмо автору
 
   для: bronenos   (08.04.2007 в 11:42)
 

Все, теперь до меня дошло действие механизма этого...
Но все же маленькая непонятность
Встретил я такую строчку
template<class T> void func<T> (const T& arg)

Примерно так она выглядела
Зачем нужно слово класс? Кроме класса там что нибудь может еще быть?
И почему обозначение типа стоит впритык к названию функции еще здесь?

  Ответить  
 
 автор: cheops   (09.04.2007 в 15:25)   письмо автору
 
   для: bronenos   (09.04.2007 в 12:03)
 

>Зачем нужно слово класс?
Так принято, на самом деле теперь вместо ключевого слова class можно использовать ключевое слово typename (чтобы не рождать неуместных ассоциаций).
template<typename T> void func<T> (const T& arg)

>Кроме класса там что нибудь может еще быть?
Это лишь ключевое слово - оно обозначает, что вы объявляете параметр, в качестве которого может выступать хоть базовый тип, хоть класс.

>И почему обозначение типа стоит впритык к названию функции еще здесь?
Здесь допускается и пробел - пишите как удобнее

  Ответить  
 
 автор: bronenos   (09.04.2007 в 15:37)   письмо автору
 
   для: cheops   (09.04.2007 в 15:25)
 

не, пробелы это дело понятное
но почему
func<T> ? что здесь эта буква делает?
если бы аргумент то понятно... такой тип возвращаемого значения
но в данном случае... какой еще тип?

  Ответить  
 
 автор: cheops   (11.04.2007 в 13:21)   письмо автору
 
   для: bronenos   (09.04.2007 в 15:37)
 

Хм... вообще говоря так не должно быть, правильное объявление функции выглядит следующим образом
template <class T> void func (const T& arg)

  Ответить  
 
 автор: ddhvvn   (12.07.2008 в 21:48)   письмо автору
 
   для: cheops   (11.04.2007 в 13:21)
 

В Dev-c (скачанном с ST) на попытку создания шаблона

template <c1ass e1emType>
void print( elemType *pbegin, elemType *pend )
{
while ( pbegin != pend ) {
cout << *pbegin << ' ';
++pbegin;
}

компилятор ругается

expected primary-expression before "template"

expected `;' before "template"


Никак не пойму, в чем дело?

  Ответить  
 
 автор: bronenos   (13.07.2008 в 07:55)   письмо автору
 
   для: ddhvvn   (12.07.2008 в 21:48)
 

А может там имелось в виду..
*(++pbegin)

  Ответить  
 
 автор: ddhvvn   (13.07.2008 в 11:57)   письмо автору
 
   для: bronenos   (13.07.2008 в 07:55)
 

Так ругается он на строчку выше, где template...

  Ответить  
 
 автор: bronenos   (13.07.2008 в 20:59)   письмо автору
 
   для: ddhvvn   (13.07.2008 в 11:57)
 

Ой, парни :D
Я просто проходился по форуму.. оказывается что тема собственно и есть моя, а я давно уже знаю эти темплейты теперь :D
А насчет этого.. может, между template и <class T> пробел не ставить?

  Ответить  
 
 автор: ddhvvn   (13.07.2008 в 23:14)   письмо автору
 
   для: bronenos   (13.07.2008 в 20:59)
 

Все варианты пробелов перепробованы!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования