Idioms and Patterns: Tag Dispatching
In this lesson, we'll learn about tag dispatching in idioms and patterns.
We'll cover the following
Tag Dispatching
Tag Dispatching enables us to choose a function based on type characteristics.
- The decision takes place at compile-time.
- Traits make the decision based on specific properties of an argument.
- The main benefit is performance.
The iterator categories from the Standard Template Library are a typical use-case:
struct input_iterator_tag{};
struct output_iterator_tag{};
struct forward_iterator_tag: public input_iterator_tag{};
struct bidirectional_iterator_tag: public forward_iterator_tag{};
struct random_access_iterator_tag: public bidirectional_iterator_tag{};
In the concrete case, std::random_access_iterator
is a refinement of std::bidirectional_iterator
, std::birectional_iterator
is a refinement of std::forward_iterator
, and std::forward_iterator
is a refinement of std::input_iterator
.
In the next lesson, we’ll look at an example of tag dispatching in idioms and patterns.
Get hands-on with 1200+ tech skills courses.