Веб программирование

Шаблоны функций

 
 

Приветствую! Сегодня поговорим о шаблонах, ибо народъ сайта VBBook.ru не захотел отвечать мне, что они хотят узнать о прекрасном и мощном языке программирования C++. Для некоторых сия статья может показаться слишком сложной, однако знание о шаблонах очень пригодится при написании больших приложений.

Писать буду в Visual Studio 2010. Код шаблона таков:

template <typename T>
inline T const& max(T const& a, T const& b)
{
    return a < b ? a : b
}

У нашей шаблонной функции 2 параметра: a и b. Тип оных определен как шаблонный параметр T. Синтаксис их следующий:

template <comma-separated-list-of-parameters>

Вместо, кстати, typename, можно использовать слово class. Раньше так и делали, ибо typename появился позже. Слово struct в данном контексте неприменимо.

Пример с использованием шаблонов (на базе обыкновенной функции max()):

int main(int argc, char ** argv)
{
        int i = 42; 
        std::cout << "max(7,i): " << ::max(7,i) << std::endl; 
 
        double f1 = 3.4; 
        double f2 = -6.7; 
        std::cout << "max(f1,f2): " << ::max(f1,f2) << std::endl; 
 
        std::string s1 = "synchrophasotron"; 
        std::string s2 = "math"; 
        std::cout << "max(s1,s2): " << ::max(s1,s2) << std::endl; 
}

max() вызывается в количестве 3 раза для: int, double и string соответственно. Каждый раз наша функция вызывалась с префиксом ::. При компиляции для каждого вызова будет сгенерирована отдельная функция.

На этом все. Можете шаблонить свой код.

Отдельно хочу поблагодарить администрацию за то, что прислушались ко мне и добавили редактор HTML-кода.


Есть вопросы? Спроси на нашем форуме!!
Кулхацкер [08.07.2012 08:26]

template <typename T>
inline T const& max(T const&a, T const&b)
{
return a < b ? b : a;
}

include <iostream>

include <string>


template <typename T>

Padre [08.07.2012 16:38]

Сейчас правильно разместилась? )

Кулхацкер [08.07.2012 17:54]

Правильно. Спасибо.

Edward [25.07.2012 20:35]

У меня простой вопрос,а нельзя ли было поставить вместо std:: несколько раз поставить просто using namespace std;? чтоб не писать std несколько раз!

Кулхацкер [26.07.2012 09:10]

У меня простой ответ: за годы работы с C++ я привык не использовать стандартное пространство имен по-умолчанию.

Edward [26.07.2012 18:26]

Всё ясно.

BaTcoH [05.07.2014 11:30]

А так не проще?

int i = 42,b;
printf("max(7,i): %dn",max(7,i));
double f1=3.4, f2=-6.7;
printf("max(f1,f2): %dn",max(f1,f2));
String s1 = "synchrophasotron", s2 = "math";
printf("max(s1,s2): %sn",max(s1,s2));

Stertor370 [05.07.2014 18:40]

Элементарно, Ватсон ;)

andreymakar2 [24.03.2016 22:24]

А почему народ не хочет узнать о С++? Конечно, хочет. По крайней мере, я.



Оставлять комментарии можно только зарегистрированным




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