Сложность выполнения - O (1). В принципе, это так же быстро, как доступ к члену структуры (потому что это по существу то, что есть). Реализация аналогична реализации std::tuple
.
Что касается сложности времени компиляции, это также O (1), но вы платите сложность времени выполнения O (n) для создания кортежа в начале. Кроме того, здесь я измеряю сложность времени компиляции с точки зрения количества экземпляров шаблонов, но это очень наивный способ измерения конечного времени компиляции.
Edit: Вот суть того, как работает доступа кортежей:
// Holds an element of the tuple
template <std::size_t n, typename Xn>
struct elt { Xn data_; };
// Inherits multiply from the holder structs
template <typename Indices, typename ...Xn>
struct tuple_impl;
template <std::size_t ...n, typename ...Xn>
struct tuple_impl<std::index_sequence<n...>, Xn...>
: elt<n, Xn>...
{ /* ... */ };
template <typename ...Xn>
struct basic_tuple
: tuple_impl<std::make_index_sequence<sizeof...(Xn)>, Xn...>
{ /* ... */ };
// When you call get<n>(tuple), your tuple is basically casted to a reference
// to one of its bases that holds a single element at the right index, and then
// that element is accessed.
template <std::size_t n, typename Xn>
Xn const& get(elt<n, Xn> const& xn)
{ return xn.data_; }
если, как сказано в документации повышения :: Hana концептуально похож на 'станд :: tuple' это будет O (1) –
Я не понимаю, почему это было бы только O (1) (во время выполнения). –
Время выполнения или время компиляции? –