Template Metaprogramming: Template Template Parameters
Template template parameters are a powerful feature in C , allowing templates to refer to other templates. However, their syntax can be confusing, leading to misconceptions.
Scenario
Consider the following code:
<code class="cpp">template<class T> class B {}; // A templated class template<template<class X> class Z = B> // The problem is in this line class BB{};</code>
The line in question is:
<code class="cpp">template<class X> class Z = B</code>
Misconception
One common misconception is that C may interpret Z as another templated class instead of a template parameter.
Explanation
C differentiates between templated classes and template parameters by their placement. In the code above, the syntax:
<code class="cpp">template<template<class X> class Z = B></code>
indicates that Z is a template parameter that expects a template with a single type parameter X. The equal sign (=) assigns the B class template as the default value for Z.
Analogy to Function Pointers
Template template parameters are analogous to function pointers that accept function arguments. Just as function pointers accept functions with specified argument types, template template parameters accept templates with specified type parameters.
Usage
Template template parameters are useful for creating highly generic code. They allow you to manipulate templates as parameters and create complex template structures.
For example, it would be possible to create a template template template parameter that takes another template template parameter. However, this is not part of the C standard.
Note
Remember that template template templates are not valid C syntax. The example provided above is merely a hypothetical illustration of the concept.
The above is the detailed content of Template Template Parameters: What\'s the Difference Between a Template and a Template Parameter?. For more information, please follow other related articles on the PHP Chinese website!