De acuerdo con boost::tuple documentation, el acceso a un solo elemento de una tupla tiene el mismo rendimiento que el acceso a una variable miembro. Por ejemplo, dada la siguiente declaración:Boost tuple performance
tuple<A, B, C> t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;
Estas dos afirmaciones deben tener el mismo (o con una diferencia insignificante) rendimiento:
t1.get<2>();
t2.c;
Miré en las fuentes de impulso :: tupla y, si ellos entendido bien (no estoy seguro de que hice), get<N>
función en realidad realiza esta acción:
C get<2>(tuple<A, B, C>& t)
{
return t.tail.tail.head;
//Generally: return t.tail. <<N times>> .head;
}
esto es más similar a una consulta en una lista enlazada de un dir ect access, y, hasta donde yo entiendo, tiene O (N) complejidad en lugar de O (1), que se espera de un miembro de acceso. De mis experiencias pasadas con impulso, supongo que lo entendí mal; pero, ¿cuál es mi error? ¿Cómo funciona realmente get
?
Supongo que esto se basa en gran medida en la optimización del tiempo de compilación – Bwmat