Function template

来自cppreference.com
< cpp‎ | language

 
 
C++语言
表达式
替代表示
字面量
布尔型 - 整型 - 浮点型
字符型 - 字符串 - nullptr (C++11)
用户定义 (C++11)
Utilities
属性 (C++11)
Types
typedef声明
类型别名声明 (C++11)
Casts
隐式类型转换 - 显示类型转换
static_cast - dynamic_cast
const_cast - reinterpret_cast
内存分配
类特有的函数属性
explicit (C++11)
static
静态成员函数
模板
类模板
函数模板
杂项
 

目录

[编辑] 说明

模板允许通用的功能设计,对不同类型的工作,而不需要重写多次
原文:
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)

#模板函数声明[1] #导出模板函数的声明。这是非常罕见的编译器上实现的,不应该使用的函数体可以被定义在一个单独的文件[2]

[编辑] 参数

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 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里

[编辑] 为例

[edit]
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
}


[编辑] 见也

[编辑] 注释

  1. 的函数体必须是可见的模板函数被调用时
原文:
这段文字是通过 Google Translate 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里