Форум программистов, компьютерный форум CyberForum.ru

для чего и как исползовать "template"? - C++

Восстановить пароль Регистрация
 
Programmer.
Прогер
 Аватар для Programmer.
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
20.01.2012, 07:25     для чего и как исползовать "template"? #1
Привет всем...

может ктото обяснит как исползовать template?
спасибо заранее...

П.С гугл не впомош, если ктото даст пример то буду рад..

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.01.2012, 07:40     для чего и как исползовать "template"? #2
Начнём с истоков. Рассмотрим код функции на С для сложения двух чисел типа int:
C
1
2
3
4
int sum(int a, int b)
{
    return a + b;
}
До тех пор, пока нам достаточно складывать целые числа - всё хорошо. Но если нам понадобилось сложить действительные? Придётся писать для этого другую функцию, с другим именем. Набор функций теперь будет выглядеть так:
C
1
2
3
4
5
6
7
8
9
int int_sum(int a, int b)
{
    return a + b;
}
 
double double_sum(double a, double b)
{
    return a + b;
}
Понятно, что для каждого нового типа данных необходимо писать новую функцию. Программист в итоге должен помнить огромное количество имён для каждого типа данных. Запутаться проще простого.
В С++ появилось новое средство - перегрузка функций. Это значит, что можно иметь несколько функций с одним и тем же именем, которые отличаются только количеством или/и типом параметров. Тогда наш набор функций станет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
int sum(int a, int b)
{
    return a + b;
}
 
double sum(double a, double b)
{
    return a + b;
}
Пользователю функций теперь не нужно помнить кучу имён, достаточно знать, что если функции sum передать два параметра нужного типа, на выходе будет верный результат. Однако задача программиста-разработчика библиотеки - постоянно поддерживать набор функций в актуальном состоянии. Например, понадобилась такая же функция для сложения строк. Придётся в библиотеку добавить новую функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int sum(int a, int b)
{
    return a + b;
}
 
double sum(double a, double b)
{
    return a + b;
}
 
std::string sum(const std::string& a, const std::string& b)
{
    return a + b;
}
Если посмотреть в тела всех этих функций - видно, что там выполняется один и тот же код - применения оператора + для двух переданных в функцию аргументов. Как бы сократить количество кода? Для этого достаточно написать одну шаблонную функцию:
C++
1
2
3
4
5
template<typename T>
T sum(const T& a, const T& b)
{
    return a + b;
}
Главное, чтобы для типа T был перегружен оператор +. При компиляции вместо T будет подставлен конкретный тип, который будет выведен из типа параметров. При этом для каждого используемого типа будет сгенерирована своя версия функции, т.е. в итоге мы всё равно получим несколько функций, по одной на каждый тип, который используется при вызове шаблонной функции. Но для нас это будет незаметно, в коде по-прежнему будет одна шаблонная функция.
Programmer.
Прогер
 Аватар для Programmer.
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
21.01.2012, 03:02  [ТС]     для чего и как исползовать "template"? #3
silent_1991,
Огромное мпасибо

А как template с отношением классов? или в простой код(буз функций)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.01.2012, 05:09     для чего и как исползовать "template"? #4
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов? или в простой код(буз функций)
почитай хотя бы вики
Black Fregat
 Аватар для Black Fregat
1353 / 983 / 215
Регистрация: 31.05.2009
Сообщений: 4,093
21.01.2012, 05:26     для чего и как исползовать "template"? #5
Цитата Сообщение от Programmer. Посмотреть сообщение
А как template с отношением классов?
Идея та же самая - скажем, шаблонный класс std::vector из стандартной библиотеки позволяет сделать вектор "чего угодно", но каждый раз при использовании нужно явно указывать тип содержимого, например, std::vector<int> или std::vector<std::string> или даже std::vector<std::vector<int> >. И все методы будут работать с этим типом без дополнительных телодвижений.
Цитата Сообщение от Programmer. Посмотреть сообщение
или в простой код(буз функций)
Только классы или функции
Yandex
Объявления
21.01.2012, 05:26     для чего и как исползовать "template"?
Ответ Создать тему
Опции темы

Текущее время: 08:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru