лекции программирование / polevoy_cpp_2012_spring_lecture_04
.pdfРазмещение шаблонного кода
•определение шаблона д.б. доступно в точке инстанциирования
•размещайте весь шаблонный код в
заголовочных файлах
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 |