- Expert C++
- Vardan Grigoryan Shunguang Wu
- 277字
- 2021-06-24 16:34:05
Syntax
There are two ways to define function templates, as shown in the following code:
template <typename identifier_1, …, typename identifier_n >
function_declaration;
template <class identifier_1,…, class identifier_n>
function_declaration;
Here, identifier_i (i=1,…,n) is the type or class parameter and function_declaration declares the function body part. The only difference in the preceding two declarations is the keywords –one uses class while the other uses typename, but both have the same meaning and behavior. Since a type (such as the basic types – int, float, double,enum, struct, union, and so on) is not a class, the typename keyword method was introduced to avoid confusion.
For example, the classic find maximum value function template, app_max(), can be declared as follows:
template <class T>
T app_max (T a, T b) {
return (a>b?a:b); //note: we use ((a)>(b) ? (a):(b)) in macros
} //it is safe to replace (a) by a, and (b) by b now
This function template can work for many data types or classes, as long as there's a copy-constructible type where the a>b expression is valid. For user-defined classes, this means that the greater-than operator (>) must be defined.
Note that the function template and template function are different things. Function template refers to a kind of template that's used to generate functions by a compiler, so the compiler does not generate any object code for it. On the other hand,template function means an instance from a function template. Since it is a function, the corresponding object code is generated by the compiler. However, the latest C++ standard documents suggest avoiding using the imprecision term template function. Therefore, we will use function templates and member function templates in this book.
- 嵌入式軟件系統測試:基于形式化方法的自動化測試解決方案
- Java入門經典(第6版)
- ASP.NET Core 5.0開發入門與實戰
- Oracle Database In-Memory(架構與實踐)
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- Microsoft Dynamics 365 Extensions Cookbook
- JavaFX Essentials
- iOS編程基礎:Swift、Xcode和Cocoa入門指南
- Express Web Application Development
- 微信小程序開發與實戰(微課版)
- Kubernetes進階實戰
- C++從入門到精通(第6版)
- 深入淺出Python數據分析
- Microsoft HoloLens By Example
- Java 11 and 12:New Features