Template Declarations
A template declaration begins with a template header followed by a function declaration or definition, or a class declaration or definition. Template declarations can appear only at namespace or class scope. The template name must be unique in its scope (except for overloaded functions).
The template header starts with the template
keyword followed by the template
parameters enclosed in angle brackets (<>
). Multiple parameters are separated
by commas. The syntax is:
template <parameter-list
>declaration
There are three kinds of template parameters: values, types, and class templates. Similar to a function parameter, a template parameter has an optional name and an optional default argument.
Function templates cannot have default template arguments. If a class template has member definitions that are outside the class definition, only the class template takes default arguments; the individual member definitions do not. If a default argument is present, it is preceded by an equal sign. Only the rightmost parameters can have default arguments. If any parameter has a default argument, all parameters to its right must also have default arguments. Example 7-2 shows valid and invalid member definitions.
// OK: default argument for template parameter A template<typename T, typename A = std::allocator<T> > class hashset { bool empty( ) const; size_t size( ) const; ... }; // Error: do not use default argument here template<typename ...
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.