Gemäß boost::tuple documentation hat der Zugriff auf ein einzelnes Element eines Tupels die gleiche Leistung wie der Zugriff auf eine Elementvariable. Zum Beispiel die folgende Erklärung gegeben:Boost-Tupel-Leistung
tuple<A, B, C> t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;
Diese beiden Aussagen sind gleich (oder mit vernachlässigbarer Unterschied) Leistung:
t1.get<2>();
t2.c;
schaute ich in die Quellen von boost :: tuple und, wenn ich verstand sie richtig (ich bin nicht sicher, ich habe), get<N>
Funktion diese Aktion tatsächlich durchführt:
C get<2>(tuple<A, B, C>& t)
{
return t.tail.tail.head;
//Generally: return t.tail. <<N times>> .head;
}
Das ist ähnlich wie bei einem Look-up als eine Richt ect-Zugang, und, soweit ich es erspähe, hat O (N) -Komplexität anstelle von O (1), was von einem Mitglied-Zugang erwartet wird. Von meinen früheren Erfahrungen mit Boost würde ich annehmen, dass ich es falsch verstanden habe; aber was ist mein Fehler? Wie funktioniert get
wirklich?
Ich rate das hängt stark von der Kompilierzeit Optimierung – Bwmat