![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Собственно сабж. Сейчас вплотную принялся за С++. Вот по мере изучения, кое-где и вспоминания, возникают вопросы.
Под словом "лучше" подразумевается не то, что допустим шаблоны forever, а перегрузка ацтой, или наоборот. Понятно конечно что существуют обстоятельства, когда оправдано использовать одно, и отказываться от другого и опять же наоборот. Вот собственно и подскажите мне пожалуйста, в каких случаях лучше использовать шаблоны функций, а когда их перегрузку. Что рекомендует по этому поводу хороший стиль программирования на С++? Заранее благодарен! -------------------- |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
ИМХО шаблоны нужно в тех случаях когда неизвестно какие типы будут использоваться или кол-во типов неразумно большое (при сотне типов ты не будешь перегрузку делать).
Перегрузку имхо следует использовать в тех случаях когда у типов которые предполагается использовать, разные интерфейсы. При это типов которые ты предполагаешь юзать в классе немного, штук пять-шесть. Если тебе надо делать перегрузку большего числа то ИМХО это уже не очень хорошая проектировка. Это сообщение отредактировал(а) chipset - 21.11.2004, 00:15 --------------------
|
|||
|
||||
| sergejzr |
|
||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Или, если для любого типа обработка в функции будет одинаковой например
Также шаблоны прекрасно используются для алгоритмов, где тип не важен. Например сортировка. Также перегрузку можно использовать вместе с шаблонами. Например если для всех типов, кроме флоата обарботка одинакова, то делаем шаблон, а для флоата перегружаем. Короче делаем то, что удобней, а самое главное так, чтобы через месяц ещё можно было прочесть и понять код |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А если бы надо было допустим для типа A просто вывести значение обьекта а для типа B ещё выполнить функцию которая переведёт значение обьекта в нормальный то лучше перегрузку. --------------------
|
||||
|
|||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: нет Всего: 154 |
Спасибо!
-------------------- |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
так же не следует забывать, что шаблоны не компилируются в какой-то один объект, способный обрабатывать любой тип данных. Вместо этого из шаблона генерируются различные объекты для каждого типа, для которого применяется шаблон. Т.е. хочу сказать, что вместо 20 Кб исходника, можно ( при не разумном использовании ) получить 30 Кб .
З.Ы.: шаблоны следует использовать для контейнеров и алгоритмов Это сообщение отредактировал(а) bel_nikita - 21.11.2004, 03:32 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |