Повышение производительности кортежа

Согласно документации boost :: tuple , доступ к одному элементу кортежа имеет такую ​​же производительность, как и доступ к переменной-члену. Например, учитывая следующее объявление:

tuple t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;

Эти два оператора должны иметь равную (или с незначительной разницей) производительность:

t1.get<2>();
t2.c;

Я изучил источники boost :: tuple и, если я правильно их понял (я не уверен, Я сделал), функция get фактически выполняет следующее действие:

C get<2>(tuple& t)
{
    return t.tail.tail.head;
    //Generally:  return t.tail. <> .head;
}

Это больше похоже на поиск в связанном списке, чем на прямой доступ, и, насколько я понимаю, имеет Сложность O (N) вместо O (1), которая ожидается от доступа к члену. Судя по моему прошлому опыту работы с Boost, я ошибся; но в чем моя ошибка? Как получить действительно работает?

6
задан FireAphis 29 November 2010 в 08:33
поделиться