Please enable JavaScript.
Coggle requires JavaScript to display documents.
Templates - Coggle Diagram
Templates
Шаблонные классы
-
Определение метода внутри класса:
template <class T>
class className
{
...
T& operator {...}
int getLength(); // объявление
};
-
Пример наследования:
tempate<class T>
class TypeSize
{
protected:
T value;
};
template<class T1>
class TypeInfo : public TypSize<T1>
{
void ShowTypeName()
{
cout << "Name type: " <<
typeid(TypeSize<T1>::value).name() << endl; //пример доступа к полю базового класса
}
};
Пример с параметром фиксированного типа
template <class T, int n=1>
class Vector
{...}
Что такое шаблоны
Возможность создать обобщенный класс с одинаковыми алгоритмами для разных типов данных
трафарет, используемый для создания классов или функций
Инстанциирование шаблона (создание экземпляра шаблона) происходит в момонт вызова шаблонной функции компилятором c конкретным типом
Определение метов нужно писать в заголовочных файлах так как файл-пользователь узнает реализацию шаблоного метода только через .h из-за того, что определение шаблона не вызывает самостоятельную генерацию кода компилятором
Компилятор копирует шаблон функции и заменяет типы параметров шаблона функции фактическими (передаваемыми) типами данных
Все шаблонные типы указанныые в <> скобках должны быть и в параметрах этой функции
template <typename T1, typename T2>
T1 Minimum(T1 a, T1 b) {...} //error T2 never used in params
template <typename T1, typename T2>
T2 Minimum(T1 a, T1 b) //error, params only
Виды перегрузок шаблонов
Явная «перегрузка» (explicit specialization)(Специализация шаблона) шаблонной функции – это объявление еще одной функции с таким же именем, но уже для конкретного типа
template <class T>
void Display(T t)
{...}
void Display(std::string t)
{...}
template <typename T1, typename T2> T1 Minimum(T1 a, T2 b)
template<> char Minimum<char *> (char a, char** b) {...}
Перегрузка шаблона в обычном понимании
(не путать с явной перегрузкой)
использование одного и того же имени для шаблонной функции, но с разным количеством параметров.
template <typename T>
T Max(T value1, T value2)
template <class T>
T Max(T value1, T value2, T value3)
-
Шаблонные функции
template <typename T>
T max(T a, T b)
{
return (a > b) ? a : b;
{
-
template <typename T1, typename T2>
пример с несколькими параметрами
-