Wie ist std::tuple umgesetzt?
Ich würde gerne wissen, wie sind Tupel implementiert in der standard-Bibliothek für C++0x. Ich versuchte zu Lesen Beschreibung in libstdc++ - Handbuch und dann Lesen Vorlage Auflistung, aber es ist wirklich schwer zu verstehen, wie es funktioniert, vor allem beim Lesen von code.
Kann jemand erklären mir in wenigen Sätzen die Idee von tuple-Implementierung? Ich möchte dies wissen, weil ich denken über die Verwendung von Tupeln in meinem code und ich möchte verstehen, wie es funktioniert und welche Art von overhead bedeutet es bringt (erstreckt sich kompilieren nur Zeit, führen viele copy-Operationen auf den Speicher, ausführen viele andere Funktion im Konstruktor, etc).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist ein Ansatz zur Implementierung von Tupeln mit mehrfach-Vererbung. Der Tupel-Elemente werden gehalten von leaf-Klassen, und die tuple-Klasse selbst erbt von mehreren Blättern. In pseudo-code:
Jedes Blatt hat einen index, so dass jeder Basis-Klasse wird einzigartig, auch wenn die Typen, die Sie enthalten, identisch sind, so können wir auf die N-TEN element mit einem einfachen static_cast:
Habe ich geschrieben, eine detaillierte Erklärung zu diesem "flachen" Tupel Umsetzung hier: C++11-tuple-Implementierung-details (Teil 1)
Einem Tupel wird in der Regel umgesetzt werden, da eine compile-Zeit verkettete Liste.
Der code ist ein wenig verschleiert durch die template-syntax, aber folgende Elemente sind normalerweise vorhanden:
Gibt es vernünftige Implementierungen in C++03 (z.B. boost).
Variadic-templates ermöglichen es, eine unbegrenzte Anzahl von Elementen, wie erwähnt von Motti.
Den Kosten ist in der Regel eine compile-Zeit-ein. Copy-Konstruktoren aufgerufen werden könnten, die während der Initialisierung (max 1), und beim kopieren der Tupel selbst.
Ich dachte, ich möchte hinzufügen, ein nicht-pseudocode einfache rekursive Implementierung zur Referenz
Umsetzung
std::tuple
ist möglich über variadic templates, eingeführt wurden in der core-Sprache.Ich weiß, das wirft die Frage auf, aber es gibt Ihnen eine bessere search phrase Forschung.