Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции программирование / polevoy_cpp_2012_spring_lecture_04

.pdf
Скачиваний:
26
Добавлен:
20.04.2015
Размер:
112.14 Кб
Скачать

Размещение шаблонного кода

определение шаблона д.б. доступно в точке инстанциирования

размещайте весь шаблонный код в

заголовочных файлах

03.03.2012

www.cppNewb.ru

31

Определение функции (пример)

//in .h template<typename T>

T minimum(const T& lhs, const T& rhs);

//in .h

template<typename T> T

minimum(const T& lhs, const T& rhs)

{

}

03.03.2012

www.cppNewb.ru

32

Определение неподставляемых методов класса (пример)

// in CArr.h

// in CArr.h

template<typename T>

template<typename T>

class CArr

int

{

CArr<T>::size() const

public:

{

int size() const;

}

};

 

03.03.2012

www.cppNewb.ru

33

Специализация

версия шаблонного кода для конкретного набора параметров

позволяет реализовывать выбор

оптимальной реализации для заданного набора параметров

03.03.2012

www.cppNewb.ru

34

Параметрический полиморфизм

или полиморфизм времени компиляции

реализуется с помощью механизма шаблонов

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

03.03.2012

www.cppNewb.ru

35

Генерируемый код

инстанциирование должно иметь место только для используемого кода

для каждого уникального набора параметров генерируется свой код

возможно “разбухание” программы

03.03.2012

www.cppNewb.ru

36

Сообщения об ошибках в шаблонном коде

требуют внимательного разбора

часто связаны с передачей недопустимых параметров

03.03.2012

www.cppNewb.ru

37

Стандартная библиотека

STL (Standard Template Library)

шаблонная часть стандартной библиотеки

содержит много полезных и качественно

реализованных классов и функций

03.03.2012

www.cppNewb.ru

38

Контейнер (примеры)

массив

фиксированного размера

динамический (std::vector<>)

список (std::list<>)

множество (std::set<>)

строка (std::basic_string<>)

03.03.2012

www.cppNewb.ru

39

Заголовочные файлы

• совпадают с именем контейнера

<vector>

<list>

<deque>

<set> - в т.ч. multiset <map> - в т.ч. multimap

• вспомогательные

<utility>

<iterator>

03.03.2012

www.cppNewb.ru

40