Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Antosha
1 / 1 / 1
Регистрация: 23.06.2014
Сообщений: 110
1

Что такое шаблоны функций?

18.08.2014, 22:34. Просмотров 593. Ответов 15
Метки нет (Все метки)

Люди обясните пожалуйста шаблоны функций

На заннятиях чучуть провтыкал помогите вы буду благодарен!!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 22:34
Ответы с готовыми решениями:

Что такое шаблоны в C++?
Что такое шаблоны и для чего они нужны? Если не трудно приведите показательный пример применения...

В этой части кода происходит объявление функций? Что такое void? Что в скобках?
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float...

Что такое переопределение функций
По заданию нужно в программе применить перепределение функций. Поюзал- везде ссылаются на...

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

15
EfimKR
56 / 29 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
18.08.2014, 22:45 2
temlate <class T> T func(T a); - вот припер прототипа шаблона.
Данная функция принимает параметр типа Т и такой же возвращает. Т это конкретный параметр который передается в функцию. При этом создается копия такой функции для конкретного параметра.
Например func(5) - вместо Т везде подставляется int.
func(5.25) - вместо Т везде подставляется double.
func('F') - вместо Т везде подставляетсяchar.
Вместо ключевого слова class может использоваться typename.
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
0
IrineK
Заблокирован
18.08.2014, 22:49 3
Стэнли Липпман о шаблонах функций
0
ForEveR
В астрале
Эксперт С++
8012 / 4769 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.08.2014, 23:41 4
Цитата Сообщение от EfimKR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Чего? А с каких это пор я не могу вызвать функцию func<double> например? То, что вы написали, это определение шаблонного параметра из аргумента, однако никто не запрещает указывать аргумент явно, при вызове.
0
18.08.2014, 23:41
EfimKR
56 / 29 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 00:16 5
ForEveR, я имел ввиду при объявлении прототипа.
0
DrOffset
11098 / 5952 / 1460
Регистрация: 30.01.2014
Сообщений: 9,589
19.08.2014, 00:25 6
Цитата Сообщение от ForEveR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Это не так.
0
ForEveR
В астрале
Эксперт С++
8012 / 4769 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
19.08.2014, 09:38 7
EfimKR, И? Это все равно не ошибка, а вполне нормальный код.
DrOffset, Не то сообщение процитировали.)
0
DrOffset
19.08.2014, 09:41
  #8

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Не то сообщение процитировали
Точно, извини. Только сообщение то, не тот автор :) Но, я думаю, ты все равно понял, что я имел в виду.

0
EfimKR
56 / 29 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 09:58 9
DrOffset, ForEveR, я ошибся при пояснении. Имел ввиду, если объявить шаблон вот так:
temlate <class T> int func(int a), то компилятор выдаст ошибку.
0
Убежденный
Ушел с форума
Эксперт С++
16264 / 7330 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
19.08.2014, 10:00 10
http://codepad.org/0dbS21Fs
C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
void func(int a)
{
}
 
int main()
{
    func<bool>(123);
    return 0;
}
Никаких ошибок
0
EfimKR
56 / 29 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 10:02 11
Убежденный, а без <bool>?
0
Убежденный
Ушел с форума
Эксперт С++
16264 / 7330 / 1183
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
19.08.2014, 10:05 12
Ну при вызове, понятное дело, будет ошибка, ибо компилятор
не сможет вывести правильный тип. Но исходное утверждение было другим.

Вообще, не думай, что я придираюсь, отнюдь нет
Просто в таких вещах должна быть точность.
0
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
19.08.2014, 11:10 13
Объяснение понятное, но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных, везде фигурируемых "арифметическая операция над любым типом".
Кто покажет или расскажет на словах ситуацию, где шаблон лучшее, а лучше - единственное решение.
0
MrCold
865 / 763 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
19.08.2014, 11:17 14
krv, STL
0
John Prick
840 / 771 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
19.08.2014, 11:17 15
Цитата Сообщение от krv Посмотреть сообщение
Кто покажет или расскажет на словах ситуацию, где шаблон лучшее, а лучше - единственное решение.
Единственное решение - вообще весьма редкий случай. Ну а насчёт лучших решений - STL, например. Standart Template Library, название говорит само за себя. Например, копирование оттуда:
C++
1
2
3
4
5
6
7
template <class II, class OI>
OI copy(II first, II last, OI out)
{
    for (; first < last; ++first, ++out)
        *out = *first;
    return out;
}
Эта функция подойдёт для любых типов, поддерживающих операции <, ++ и *. Самый простой - указатель, более сложный - различные классы итераторов. Если бы не было шаблонов, пришлось бы дублировать эту функцию для каждого типа, для которого осуществлялось бы копирование. Т.е. для int[], double[], char*, string::iterator и т.д. разные функции, которые отличались бы, по сути, только названиями типов в заголовке.
2
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2014, 17:01 16
Цитата Сообщение от krv Посмотреть сообщение
но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных
Цитата Сообщение от John Prick Посмотреть сообщение
Например, копирование оттуда
Ну да, Степанов только после появления шаблонов С++ смог реализовать свою мечту по написанию обобщенных алгоритмов, впоследствии стандартизованных в STL.

Добавлено через 1 минуту
Ну и Александреску почитайте, там примеры далеко не примитивные.
0
19.08.2014, 17:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 17:01

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из...

Шаблоны функций
Rififi, привет какой у тебя емеил Добавлено через 58 минут 9 секунд тема: Шаблони функції ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.