Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что лучше использовать? Шаблоны функций, или их перегрузку? 
:(
    Опции темы
Medved
Дата 21.11.2004, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Собственно сабж. Сейчас вплотную принялся за С++. Вот по мере изучения, кое-где и вспоминания, возникают вопросы.

Под словом "лучше" подразумевается не то, что допустим шаблоны forever, а перегрузка ацтой, или наоборот.
Понятно конечно что существуют обстоятельства, когда оправдано использовать одно, и отказываться от другого и опять же наоборот.

Вот собственно и подскажите мне пожалуйста, в каких случаях лучше использовать шаблоны функций, а когда их перегрузку. Что рекомендует по этому поводу хороший стиль программирования на С++?

Заранее благодарен!


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
chipset
Дата 21.11.2004, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



ИМХО шаблоны нужно в тех случаях когда неизвестно какие типы будут использоваться или кол-во типов неразумно большое (при сотне типов ты не будешь перегрузку делать).
Перегрузку имхо следует использовать в тех случаях когда у типов которые предполагается использовать, разные интерфейсы. При это типов которые ты предполагаешь юзать в классе немного, штук пять-шесть. Если тебе надо делать перегрузку большего числа то ИМХО это уже не очень хорошая проектировка.

Это сообщение отредактировал(а) chipset - 21.11.2004, 00:15


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
sergejzr
Дата 21.11.2004, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Цитата(chipset @ 20.11.2004, 23:12)
ИМХО шаблоны нужно в тех случаях когда неизвестно какие типы будут использоваться или кол-во типов неразумно большое (при сотне типов ты не будешь перегрузку делать).

Или, если для любого типа обработка в функции будет одинаковой smile
например
Код

template<class T>
void example(T &t)
{
 //тут пофигу, какой тип. Обработка одинакова
 cin>>t;
 cout<<t;
}


Также шаблоны прекрасно используются для алгоритмов, где тип не важен. Например сортировка.

Также перегрузку можно использовать вместе с шаблонами.
Например если для всех типов, кроме флоата обарботка одинакова, то делаем шаблон, а для флоата перегружаем.

Короче делаем то, что удобней, а самое главное так, чтобы через месяц ещё можно было прочесть и понять код smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
chipset
Дата 21.11.2004, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(sergej @ 20.11.2004, 13:24)
Или, если для любого типа обработка в функции будет одинаковой
например


А если бы надо было допустим для типа A просто вывести значение обьекта а для типа B ещё выполнить функцию которая переведёт значение обьекта в нормальный то лучше перегрузку. smile



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Medved
Дата 21.11.2004, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



Спасибо!


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
bel_nikita
Дата 21.11.2004, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



так же не следует забывать, что шаблоны не компилируются в какой-то один объект, способный обрабатывать любой тип данных. Вместо этого из шаблона генерируются различные объекты для каждого типа, для которого применяется шаблон. Т.е. хочу сказать, что вместо 20 Кб исходника, можно ( при не разумном использовании ) получить 30 Кб .

З.Ы.: шаблоны следует использовать для контейнеров и алгоритмов

Это сообщение отредактировал(а) bel_nikita - 21.11.2004, 03:32


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.