Tag dispatching
ist ein Name für eine Technik, die verwendet wird, um die korrekte überladene Funktion zu finden. Also, technisch ist es nichts als Überladung nur.
Um es von Boost Website zu setzen:
Tag Dispatching eine Art und Weise der Verwendung Funktion Überlastung ist auf die Eigenschaften eines Typs basiert versenden, und oft Hand in Hand mit Züge Klassen verwendet wird.
Sie können es überall in Ihrer Standardbibliothek verwendet algorithm
Header-Datei. Nehmen wir als Beispiel an, dass es einen Algorithmus gibt, der effizienter auf einem Container ausgeführt werden kann, der einen wahlfreien Zugriff bereitstellt (z. B. vector
) als ein Container, der einen bidirektionalen Zugriff bereitstellt (list
). Also, für den Algorithmus der Auswahl auf der Grundlage des iterator type
würde man Tag verwenden Dispatching iterator_traits
template <typename Iter>
void AlgoXImpl(Iter first, Iter last, bidirectional_iterator_tag) {
//.....Algo specialized to bidirectional iterators
}
template <typename Iter>
void AlgoXImpl(Iter first, Iter last, random_access_iterator_tag) {
//.....Algo specialized to random access iterators
}
template <typename Iter>
void AlgoX(Iter first, Iter last) {
if (first == last) return;
AlgoXImpl(first, last, typename iterator_traits<Iter>::iterator_category());
}
Verwendung Wie Sie sehen können, auf einen einfachen Geist das ist nichts anderes als ein Beispiel für Betreiber Überlastung als die Kategorien im Wesentlichen unterschiedliche Typen sind.
Für ein realeres Beispiel können Sie auschecken, wie std::rotate
implementiert ist.
Tag-basiertes Dispatching wird durch Überladen erreicht – Arunmu