Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 110

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

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

Студворк — интернет-сервис помощи студентам
Люди обясните пожалуйста шаблоны функций

На заннятиях чучуть провтыкал помогите вы буду благодарен!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.08.2014, 22:34
Ответы с готовыми решениями:

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

В этой части кода происходит объявление функций? Что такое void? Что в скобках?
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

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

15
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
18.08.2014, 22:45
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
2023 / 1641 / 425
Регистрация: 23.02.2011
Сообщений: 6,002
Записей в блоге: 25
18.08.2014, 22:49
Стэнли Липпман о шаблонах функций
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
18.08.2014, 23:41
Цитата Сообщение от EfimKR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Чего? А с каких это пор я не могу вызвать функцию func<double> например? То, что вы написали, это определение шаблонного параметра из аргумента, однако никто не запрещает указывать аргумент явно, при вызове.
0
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
19.08.2014, 00:16
ForEveR, я имел ввиду при объявлении прототипа.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
19.08.2014, 00:25
Цитата Сообщение от ForEveR Посмотреть сообщение
Если параметр был обьявлен в угловых скобках, он обязательно должен фигурировать в передаваемых в функцию параметрах.
temlate <class T> int func(int a) - ошибка!
Это не так.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
19.08.2014, 09:38
EfimKR, И? Это все равно не ошибка, а вполне нормальный код.
DrOffset, Не то сообщение процитировали.)
0
19.08.2014, 09:41

Не по теме:

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

0
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
19.08.2014, 09:58
DrOffset, ForEveR, я ошибся при пояснении. Имел ввиду, если объявить шаблон вот так:
temlate <class T> int func(int a), то компилятор выдаст ошибку.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
19.08.2014, 10:00
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
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
19.08.2014, 10:02
Убежденный, а без <bool>?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
19.08.2014, 10:05
Ну при вызове, понятное дело, будет ошибка, ибо компилятор
не сможет вывести правильный тип. Но исходное утверждение было другим.

Вообще, не думай, что я придираюсь, отнюдь нет
Просто в таких вещах должна быть точность.
0
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329
19.08.2014, 11:10
Объяснение понятное, но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных, везде фигурируемых "арифметическая операция над любым типом".
Кто покажет или расскажет на словах ситуацию, где шаблон лучшее, а лучше - единственное решение.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
19.08.2014, 11:17
krv, STL
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
19.08.2014, 11:17
Цитата Сообщение от 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
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.08.2014, 17:01
Цитата Сообщение от krv Посмотреть сообщение
но я так и не придумал ни разу нормального примера использования шаблонов, кроме примитивных
Цитата Сообщение от John Prick Посмотреть сообщение
Например, копирование оттуда
Ну да, Степанов только после появления шаблонов С++ смог реализовать свою мечту по написанию обобщенных алгоритмов, впоследствии стандартизованных в STL.

Добавлено через 1 минуту
Ну и Александреску почитайте, там примеры далеко не примитивные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2014, 17:01
Помогаю со студенческими работами здесь

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

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

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

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

Шаблоны функций
Написала прогу на шаблоны функций. не могу понять где ошибка // функции.cpp: определяет точку входа для консольного приложения. // ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru