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

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

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

Люди обясните пожалуйста шаблоны функций
http://www.cyberforum.ru/cpp-beginners/thread858978.html

На заннятиях чучуть провтыкал помогите вы буду благодарен!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 22:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что такое шаблоны функций? (C++):

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

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

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

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

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

15
EfimKR
55 / 28 / 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
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.08.2014, 23:41 #4
Цитата Сообщение от EfimKR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Чего? А с каких это пор я не могу вызвать функцию func<double> например? То, что вы написали, это определение шаблонного параметра из аргумента, однако никто не запрещает указывать аргумент явно, при вызове.
0
EfimKR
55 / 28 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 00:16 #5
ForEveR, я имел ввиду при объявлении прототипа.
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
19.08.2014, 00:25 #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Это не так.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 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
55 / 28 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 09:58 #9
DrOffset, ForEveR, я ошибся при пояснении. Имел ввиду, если объявить шаблон вот так:
temlate <class T> int func(int a), то компилятор выдаст ошибку.
0
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 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
55 / 28 / 13
Регистрация: 24.06.2014
Сообщений: 247
Записей в блоге: 1
19.08.2014, 10:02 #11
Убежденный, а без <bool>?
0
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
19.08.2014, 10:05 #12
Ну при вызове, понятное дело, будет ошибка, ибо компилятор
не сможет вывести правильный тип. Но исходное утверждение было другим.

Вообще, не думай, что я придираюсь, отнюдь нет
Просто в таких вещах должна быть точность.
0
krv
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 328
19.08.2014, 11:10 #13
Объяснение понятное, но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных, везде фигурируемых "арифметическая операция над любым типом".
Кто покажет или расскажет на словах ситуацию, где шаблон лучшее, а лучше - единственное решение.
0
MrCold
859 / 757 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
19.08.2014, 11:17 #14
krv, STL
0
John Prick
831 / 764 / 256
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 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
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2014, 17:01 #16
Цитата Сообщение от krv Посмотреть сообщение
но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных
Цитата Сообщение от John Prick Посмотреть сообщение
Например, копирование оттуда
Ну да, Степанов только после появления шаблонов С++ смог реализовать свою мечту по написанию обобщенных алгоритмов, впоследствии стандартизованных в STL.

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

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

Шаблоны функций
тема: Шаблони функції Помогите написпть код програми на Turbo C++ ...

Шаблоны функций
Задание. 1. Реализовать на языке С++ программу, в которой оформ-лены в виде...

Шаблоны функций
Пытаюсь разобраться в шаблонах функций. Написал такой код, не работает: ...


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

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

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