- 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.
- Web程序設計及應用
- JavaScript前端開發模塊化教程
- Getting Started with Gulp(Second Edition)
- SoapUI Cookbook
- 造個小程序:與微信一起干件正經事兒
- 簡單高效LATEX
- C/C++常用算法手冊(第3版)
- Implementing Cisco Networking Solutions
- Java Web程序設計
- PLC編程與調試技術(松下系列)
- Mastering Data Mining with Python:Find patterns hidden in your data
- Apache Camel Developer's Cookbook
- App Inventor 2 Essentials
- Drupal 8 Development Cookbook(Second Edition)
- Learning NHibernate 4