Пространства имён
Варианты
Действия

Function template

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 

Содержание

[править] Описание

Шаблоны позволяют общего назначения, функции, которые работают на различных типов, без необходимости переписывать его несколько раз
Оригинал:
Templates allow generic function design that work on various types, without the need of rewriting it multiple times
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Синтаксис

[править] Декларацию

template < template_arguments > function_declaration (1)
export template < template_arguments > function_declaration (2) (до C++11)
Шаблон # объявление функции Ошибка цитирования Отсутствует закрывающий тег </ref>
Оригинал:
{{{2}}}
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
# Экспортируемых декларации шаблон функции. Тело функции может быть определен в отдельном файле Ошибка цитирования Отсутствует закрывающий тег </ref>
Оригинал:
{{{2}}}
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Аргументы

class identifier (1)
typename identifier (2)
integral_type identifier (3)
class identifier = type_name (4) (начиная с C++11)
typename identifier = type_name (5) (начиная с C++11)
integral_type identifier = const_expr (6) (начиная с C++11)
1-2)
Внутри функции identifier может быть использован в качестве типа
Оригинал:
Inside the function identifier can be used as a type
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
3)
Внутри функции identifier может быть использован в качестве постоянной
Оригинал:
Inside the function identifier can be used as a constant
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
4-6)
По умолчанию аргументы
Оригинал:
Default arguments
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Специализация

template <> ret function_name < template_args > ( func_args ) body
Специализация меняет реализации шаблона функции для конкретных параметров шаблона
Оригинал:
Specialization changes the implementation of the template function for specific template parameters
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Вызов

function_name < template_args > ( func_args ) (1)
function_name ( unambiguous_func_args ) (2)
# Явных аргументов шаблона, если func_args не совпадают совершенно с типами, как в шаблон декларации (с заданной template_args) обычное литье произойдет
Оригинал:
# Explicit template arguments, if func_args don't match perfectly with the types as in the template declaration (with the given template_args) the usual casting will occur
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
# Неявных аргументов шаблона, выводится из аргументов функции. Нет неоднозначность может присутствовать
Оригинал:
# Implicit template arguments, deduced from the function arguments. No ambiguity can be present
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример

template<typename T>
struct S {
    template<typename U> void foo(){}
};
 
template<typename T>
void bar()
{
    S<T>s;
    s.foo<T>(); // error: < parsed as less than operator
    s.template foo<T>(); // OK
}


[править] См. также

[править] Notes

Оригинал:
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.