Function template

来自cppreference.com
< cpp‎ | language

 
 
C++语言

|- class="t-nv-h1" | colspan="5" | 一般主题 |- | |- |

预处理器
注释

|

|-

|- class="t-nv-h1" | colspan="5" | 流程控制 |-

条件执行语句

| |- |

|

|-

循环语句

| |- |

|

|-

跳转语句

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 函数 |-

函数声明 Lambda函数声明 inline说明符 异常说明符 (已弃用) noexcept说明符 (C++11)

|- class="t-nv-h1" | colspan="5" | Exceptions |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 命名空间 |- | |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类型 |- | |- |

|

|-

说明符

| |- |

decltype (C++11)
auto (C++11)
alignas (C++11)

|

|-

存储持续期说明符 Initialization

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 表达式 |- | |- |

值类别
求值顺序

|

|-

替代表示 字面量 布尔型 - 整型 - 浮点型 字符型 - 字符串 - nullptr (C++11) 用户定义 (C++11)

|- class="t-nv-h1" | colspan="5" | Utilities |-

属性 (C++11) Types typedef声明 类型别名声明 (C++11) Casts 隐式类型转换 - 显示类型转换 static_cast - dynamic_cast const_cast - reinterpret_cast 内存分配

| |- |

|

|-

|- class="t-nv-h1" | colspan="5" | 类 |- | |- |

|

|-

类特有的函数属性

| |- |

|

explicit (C++11)
static

|-

静态成员函数

| |- |

|

|- |- class="t-nv-h1" | colspan="5" | 模板 |- | |- |

类模板
函数模板

|

|- |- class="t-nv-h1" | colspan="5" | 杂项 |- | |- |

|

|-

 

目录

[编辑] 说明

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

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

[编辑] 参数

class identifier (1)
typename identifier (2)
integral_type identifier (3)
class identifier = type_name (4) (since C++11)
typename identifier = type_name (5) (since C++11)
integral_type identifier = const_expr (6) (since 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 自动翻译生成的。
您可以帮助我们检查、纠正翻译中的错误。详情请点击这里
来自“http://zh.cppreference.com/mwiki/index.php?title=cpp/language/function_template&oldid=38890