Function template
Материал из cppreference.com
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
Содержание |
[править] Описание
Шаблоны позволяют общего назначения, функции, которые работают на различных типов, без необходимости переписывать его несколько раз
Оригинал:
Templates allow generic function design that work on various types, without the need of rewriting it multiple times
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Синтаксис
[править] Декларацию
template < template_arguments > function_declaration
|
(1) | ||||||||
export template < template_arguments > function_declaration
|
(2) | (до C++11) | |||||||
Шаблон # объявление функции Ошибка цитирования Отсутствует закрывающий тег
</ref>
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Экспортируемых декларации шаблон функции. Тело функции может быть определен в отдельном файле Ошибка цитирования Отсутствует закрывающий тег
</ref>
Оригинал:
{{{2}}}
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Аргументы
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) | |||||||
Внутри функции identifier может быть использован в качестве типа
3) Оригинал:
Inside the function identifier can be used as a type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Внутри функции identifier может быть использован в качестве постоянной
4-6) Оригинал:
Inside the function identifier can be used as a constant
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
По умолчанию аргументы
Оригинал:
Default arguments
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Специализация
Этот раздел не завершён Причина: partial specialization |
template <> ret function_name < template_args > ( func_args ) body
|
|||||||||
Специализация меняет реализации шаблона функции для конкретных параметров шаблона
Оригинал:
Specialization changes the implementation of the template function for specific template parameters
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Вызов
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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Неявных аргументов шаблона, выводится из аргументов функции. Нет неоднозначность может присутствовать
Оригинал:
# Implicit template arguments, deduced from the function arguments. No ambiguity can be present
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Этот раздел не завершён Причина: better explanation/example |
[править] Пример
Этот раздел не завершён |
Запустить этот код
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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.